df.loc[]用法

568 阅读3分钟

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 中非常灵活和强大的工具,几乎可以完成所有类型的索引、选择和修改操作。