pandas.DataFrame.loc[] 是 Pandas 中用于基于标签(行标签和列标签)进行索引和选择数据的一个非常重要的功能。它非常灵活,支持多种类型的查询方式。
基本语法
DataFrame.loc[row_indexer, column_indexer]
row_indexer:指定选择哪些行(可以是行标签、布尔数组、切片等)。column_indexer:指定选择哪些列(可以是列标签、列标签列表等)。
1. 按标签选择行和列
loc[] 是通过 行标签和列标签 来进行选择的,通常与 .iloc[](按位置选择)进行对比。
示例:选择单行单列
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
}, index=['row1', 'row2', 'row3'])
# 选择 'row1' 行和 'A' 列
result = df.loc['row1', 'A']
print(result) # 输出: 1
示例:选择一行或一列
# 选择 'row2' 的所有列
result = df.loc['row2']
print(result)
# 选择所有行的 'A' 列
result = df.loc[:, 'A']
print(result)
2. 使用切片选择数据
loc[] 支持 切片 语法,但与普通的 Python 切片不同,loc[] 进行切片时 包含结束值。
示例:按行和列的标签进行切片
# 选择从 'row1' 到 'row2' 行和 'A' 到 'B' 列的子集
result = df.loc['row1':'row2', 'A':'B']
print(result)
输出:
A B
row1 1 4
row2 2 5
注意:
loc[]的切片是 包括 结束标签的。
3. 使用布尔索引选择数据
你可以通过 布尔条件 来选择符合条件的行和列。
示例:按条件选择行
# 选择 'A' 列大于 1 的行
result = df.loc[df['A'] > 1]
print(result)
输出:
A B
row2 2 5
row3 3 6
示例:按条件选择行和列
# 选择 'A' 列大于 1 的行和只选择 'B' 列
result = df.loc[df['A'] > 1, 'B']
print(result)
输出:
row2 5
row3 6
Name: B, dtype: int64
4. 选择多行和多列
loc[] 允许你选择多个行和多个列,只需提供一个行标签的列表和一个列标签的列表。
示例:选择多行和多列
# 选择 'row1' 和 'row3' 行,和 'A' 与 'B' 列
result = df.loc[['row1', 'row3'], ['A', 'B']]
print(result)
输出:
A B
row1 1 4
row3 3 6
5. 赋值操作
loc[] 也可以用来 修改 DataFrame 中的值。
示例:修改单个值
# 修改 'row1' 和 'A' 列的值为 10
df.loc['row1', 'A'] = 10
print(df)
输出:
A B
row1 10 4
row2 2 5
row3 3 6
示例:根据条件修改值
# 修改 'A' 列大于 1 的行,将它们的 'B' 列值修改为 100
df.loc[df['A'] > 1, 'B'] = 100
print(df)
输出:
A B
row1 10 4
row2 2 100
row3 3 100
6. 选择多个行和列的条件组合
你可以使用逻辑运算符将多个条件结合起来,来选择行和列。
示例:多条件选择
# 选择 'A' 大于 1 且 'B' 小于 100 的行
result = df.loc[(df['A'] > 1) & (df['B'] < 100)]
print(result)
7. 使用 loc[] 修改 DataFrame 的结构
可以通过 loc[] 添加新的行或列。
示例:添加新行
df.loc['row4'] = [4, 7]
print(df)
示例:添加新列
df.loc[:, 'C'] = [10, 20, 30, 40] # 添加一个名为 'C' 的新列
print(df)
8. 使用 loc[] 修改 DataFrame 的结构
loc[] 还可以用来 根据条件删除行,通过赋值为 NaN,然后使用 dropna() 进行删除。
示例:删除符合条件的行
# 删除 'A' 列小于 5 的行
df.loc[df['A'] < 5].dropna()
总结
- 选择行:
df.loc[row_indexer],支持标签、切片、布尔索引等。 - 选择列:
df.loc[:, column_indexer],也可以通过标签、切片等方式选择。 - 混合选择:通过
df.loc[row_indexer, column_indexer],可以选择特定的行和列。 - 布尔索引:
df.loc[condition]根据布尔条件选择行。 - 赋值:
df.loc[]支持修改单元格、行和列的值。 - 切片:与普通 Python 切片类似,支持按标签进行切片,且包含结束标签。
loc[] 是 Pandas 中非常灵活和强大的工具,几乎可以完成所有类型的索引、选择和修改操作。