DataFrame.loc
按标签或布尔数组访问一组行和列。
.loc[]
主要基于标签,但也可以与布尔数组一起使用。
允许的输入是:
- 单个标签,例如,
5
或'a'
,(注意:5
被解释为索引的标签,并且从不作为索引的整数位置)。 - 标签列表或数组, 例如,
['a', 'b', 'c']
. - 具有标签的切片对象,例如,
'a':'f'
.
注意:与通常的python切片相反,包括开始和停止
- 与被切片的轴相同长度的布尔数组, 例如,
[True, False, True]
. - 带有一个参数(调用Series,DataFrame或Panel)的可调用函数,它返回索引的有效输出(上述之一)
Raises: | KeyError: 找不到任何元素时 |
例如,
import pandas as pd # 示例 1:使用 loc 获取值 # 创建 DataFrame df = pd.DataFrame([[1, 2], [4, 5], [7, 8]], index=['cobra', 'viper', 'sidewinder'], columns=['max_speed', 'shield']) print("初始 DataFrame:\n", df) # 获取单一标签的行 print("\n获取单一标签的行:\n", df.loc['viper']) # 获取标签列表的行 print("\n获取标签列表的行:\n", df.loc[['viper', 'sidewinder']]) # 获取单行单列的值 print("\n获取单行单列的值:\n", df.loc['cobra', 'shield']) # 使用标签切片和单个标签获取值 print("\n使用标签切片和单个标签获取值:\n", df.loc['cobra':'viper', 'max_speed']) # 使用布尔列表获取值 print("\n使用布尔列表获取值:\n", df.loc[[False, False, True]]) # 使用条件获取值 print("\n使用条件获取值:\n", df.loc[df['shield'] > 6]) # 使用可调用条件获取值 print("\n使用可调用条件获取值:\n", df.loc[lambda df: df['shield'] == 8]) # 使用条件和指定列标签获取值 print("\n使用条件和指定列标签获取值:\n", df.loc[df['shield'] > 6, ['max_speed']]) # 示例 2:使用 loc 赋值 # 为与标签列表匹配的所有项设置值 df.loc[['viper', 'sidewinder'], ['shield']] = 50 print("\n为与标签列表匹配的所有项设置值:\n", df) # 为整行设置值 df.loc['cobra'] = 10 print("\n为整行设置值:\n", df) # 为整个列设置值 df.loc[:, 'max_speed'] = 30 print("\n为整个列设置值:\n", df) # 为匹配可调用条件的行设置值 df.loc[df['shield'] > 35] = 0 print("\n为匹配可调用条件的行设置值:\n", df) # 示例 3:使用整数标签获取 DataFrame 上的值 # 创建使用整数索引的 DataFrame df = pd.DataFrame([[1, 2], [4, 5], [7, 8]], index=[7, 8, 9], columns=['max_speed', 'shield']) print("\n使用整数索引的 DataFrame:\n", df) # 使用整数标签切片获取值 print("\n使用整数标签切片获取值:\n", df.loc[7:9]) # 示例 4:使用多索引获取值 # 创建使用多索引的 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) print("\n使用多索引的 DataFrame:\n", df) # 获取单一标签的行 print("\n获取单一标签的行:\n", df.loc['cobra']) # 获取单索引元组的行 print("\n获取单索引元组的行:\n", df.loc[('cobra', 'mark ii')]) # 获取行和列的单个标签 print("\n获取行和列的单个标签:\n", df.loc['cobra', 'mark i']) # 使用单元组返回 DataFrame print("\n使用单元组返回 DataFrame:\n", df.loc[[('cobra', 'mark ii')]]) # 使用索引的单个元组和列的单个标签获取值 print("\n使用索引的单个元组和列的单个标签获取值:\n", df.loc[('cobra', 'mark i'), 'shield']) # 从索引元组切片到单个标签 print("\n从索引元组切片到单个标签:\n", df.loc[('cobra', 'mark i'):'viper']) # 从索引元组切片到索引元组 print("\n从索引元组切片到索引元组:\n", df.loc[('cobra', 'mark i'):('viper', 'mark ii')])