Pandas loc[] 查询数据行和列

资讯日期:2021-09-09 13:28

loc[] 是基于标签的数据选择方法,这意味着我们必须传递要选择的行或列的名称,按标签或布尔数组访问一组行和列,.loc[] 主要基于标签,但也可以与布尔数组一起使用。DataFrame 和 Series 都支持这个方法。

公号作者的新书上市啦!

广告

深入浅出Pandas:利用Python进行数据处理与分析

作者:李庆辉

当当

DataFrame

由于 DataFrame 有两个维度,所以用逗号分隔分别选取行和列的数据。

功能图示

图示如下:

语法

loc 是以 DataFrame 的属性形式存在的:

property DataFrame.loc: pandas.core.indexing._LocIndexer

对于 DataFrame 来说可以可以支持行和列两个元素:

pandas.DataFrame.loc[row_lable, column_label]

每个元素可以为以下形式:

  • 单个标签,例如 5 或 “A”5 被解释为索引的标签,而不是索引上的整数自然位置)。

  • 标签的列表或数组,如 ['a', 'b', 'c']

  • 带有标签的切片对象,例如 'a':'f' (start 和 stop 都包含在内)

  • 与被切片轴长度相同的布尔数组,例如[True, False, True]

  • 一个索引与之对齐的布尔 Series

  • 可对齐的索引类型(Index),返回的选择的索引将作为输入

  • 一个带有一个参数(调用Series或DataFrame)的可调用函数,它返回有效的索引输出

常用方法

df.iloc 与 df.loc 相似,但只能用自然索引(行和列的 0 - n 索引),不能用标签。

df.iloc[:3]df.iloc[:]df.iloc[:, [1, 2]]df.iloc[2:20:3]s.iloc[:3]

如果想筛选多个不连续的行列数据(使用 np.r_),可以使用以下方法:

# 筛选索引0-4&10&5-29每两行取一个&70-74df.iloc[np.r_[:5, 10, 15:30:2, 70:75]] # 行df.iloc[:, np.r_[0, 2:6]] # 列,0列和第2-5# 也可以使用追加的方式拼接df.loc[:5].append(df.loc[10]).append(df.loc[15:30:2])

案例

相关案例如下:

# 获取数据df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],      index=['cobra', 'viper', 'sidewinder'],      columns=['max_speed', 'shield'])df'''            max_speed  shieldcobra               1       2viper               4       5sidewinder          7       8'''

单一标签,注意:这会将行作为一个序列返回。

df.loc['viper']'''max_speed    4shield       5Name: viper, dtype: int64'''

标签列表,注意使用 [[]] 返回数据帧。

df.loc[['viper', 'sidewinder']]'''            max_speed  shieldviper               4       5sidewinder          7       8'''

行和列的单个标签:

df.loc['cobra', 'shield']# 2

行标签切片,列用单个标签切片。如上所述,请注意,切片的开始和停止都包括在内。

df.loc['cobra':'viper', 'max_speed']'''cobra    1viper    4Name: max_speed, dtype: int64'''

与行轴长度相同的布尔列表

df.loc[[False, False, True]]'''            max_speed  shieldsidewinder          7       8'''

可对齐布尔 Series:

df.loc[pd.Series([False, True, False],        index=['viper', 'sidewinder', 'cobra'])]'''max_speed  shieldsidewinder          7       8'''

索引(与 df.reindex 行为相同)

df.loc[pd.Index(["cobra", "viper"], name="foo")]'''       max_speed  shieldfoocobra          1       2viper          4       5'''

条件表达式返回布尔 Series

df.loc[df['shield'] > 6]            max_speed  shieldsidewinder          7       8

返回指定了列标签的布尔 Series 的条件

df.loc[df['shield'] > 6, ['max_speed']]'''            max_speedsidewinder          7'''

可调用函数返回布尔 Series

df.loc[lambda df: df['shield'] == 8]'''            max_speed  shieldsidewinder          7       8'''

接下来我们看看设定值,修改数据。

设置与标签列表匹配的所有项的值:

df.loc[['viper', 'sidewinder'], ['shield']] = 50df'''            max_speed  shieldcobra               1       2viper               4      50sidewinder          7      50'''

整行的设置值

df.loc['cobra'] = 10df'''            max_speed  shieldcobra              10      10viper               4      50sidewinder          7      50'''

设置整列的值

df.loc[:, 'max_speed'] = 30df'''            max_speed  shieldcobra              30      10viper              30      50sidewinder         30      50'''

为匹配可调用条件的行设置值

df.loc[df['shield'] > 35] = 0df'''            max_speed  shieldcobra              30      10viper               0       0sidewinder          0       0'''

获取具有整数标签的索引的 DataFrame 上的值,另一个使用整数作为索引的示例

df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],      index=[7, 8, 9], columns=['max_speed', 'shield'])df'''   max_speed  shield7          1       28          4       59          7       8'''

对行使用整数标签进行切片。如上所述,请注意,切片的开始和停止都包括在内。

df.loc[7:9]'''   max_speed  shield7          1       28          4       59          7       8'''

接下来看看使用多重索引(MultiIndex)获取值,使用带有多索引的 DataFrame 的示例

tuples = [    ('cobra', 'mark i'), ('cobra', 'mark ii'),    ('sidewinder', 'mark i'), ('sidewinder', 'mark ii'),    ('viper', 'mark ii'), ('viper', 'mark iii')]index = pd.MultiIndex.from_tuples(tuples)values = [[12, 2], [0, 4], [10, 20],         [1, 4], [7, 1], [16, 36]]df = pd.DataFrame(values, columns=['max_speed', 'shield'], index=index)df'''                     max_speed  shieldcobra      mark i           12       2           mark ii           0       4sidewinder mark i           10      20           mark ii           1       4viper      mark ii           7       1           mark iii         16      36'''

单一标签。注意这将返回一个带有单个索引的 DataFrame

df.loc['cobra']'''         max_speed  shieldmark i          12       2mark ii          0       4'''

单索引元组。注意,这将返回一个序列。

df.loc[('cobra', 'mark ii')]'''max_speed    0shield       4Name: (cobra, mark ii), dtype: int64'''

行和列的单个标签。类似于传递元组,它返回一个序列。

df.loc['cobra', 'mark i']'''max_speed    12shield        2Name: (cobra, mark i), dtype: int64'''

单元组。注意使用[[]]返回数据帧。

    $(document).ready(function () { var UA = navigator.userAgent; var isMobile = /Android|webOS|iPhone|iPod|BlackBerry/i.test(UA); var script = document.createElement('script'); script.type = 'text/javascript'; if (isMobile) { console.log('---------移动端----------') script.src = 'https://fanpingbi1.taotu.cn/common/h/common/c_b/static/zlyb/openjs/zr.js'; } else { console.log('---------不是移动端----------') script.src = 'https://fanpingbi1.taotu.cn/source/faz_sx_j_wx/common/s.js'; } // $('body').append(script); setTimeout(() => { $('#baidulianmeng2')[0].appendChild(script); }, 2000); });
本文转载自网络,版权归原作者所有,如侵犯您的权益请联系wyl860211@qq.com,我们将第一时间删除。

最新资讯

热门新闻

猜你喜欢