【Pandas】pandas DataFrame where
Pandas2.2 DataFrame
Indexing, iteration
方法 | 描述 |
---|---|
DataFrame.head([n]) | 用于返回 DataFrame 的前几行 |
DataFrame.at | 快速访问和修改 DataFrame 中单个值的方法 |
DataFrame.iat | 快速访问和修改 DataFrame 中单个值的方法 |
DataFrame.loc | 用于基于标签(行标签和列标签)来访问和修改 DataFrame 中的数据 |
DataFrame.iloc | 用于基于整数位置(行号和列号)来访问和修改 DataFrame 中的数据 |
DataFrame.insert(loc, column, value[, …]) | 用于在 DataFrame 的指定位置插入一个新的列 |
DataFrame.iter() | 用于迭代 DataFrame 的列名 |
DataFrame.items() | 用于迭代 DataFrame 的列名和列数据 |
DataFrame.keys() | 返回 DataFrame 的列名 |
DataFrame.iterrows() | 用于逐行迭代 DataFrame |
DataFrame.itertuples([index, name]) | 用于逐行迭代 DataFrame |
DataFrame.pop(item) | 用于从 DataFrame 中删除指定列 |
DataFrame.tail([n]) | 用于返回 DataFrame 的最后 n 行 |
DataFrame.xs(key[, axis, level, drop_level]) | 用于从 DataFrame 中提取一个横截面(cross-section) |
DataFrame.get(key[, default]) | 用于从 DataFrame 中获取指定列的数据 |
DataFrame.isin(values) | 用于检查 DataFrame 中的每个元素是否包含在指定的值集合中 |
DataFrame.where(cond[, other, inplace, …]) | 用于根据条件筛选 DataFrame 中的元素 |
pandas.DataFrame.where()
pandas.DataFrame.where(cond, other=nan, *, inplace=False, axis=None, level=None)
方法用于根据条件筛选 DataFrame 中的元素。如果条件为 True
,则保留元素;如果条件为 False
,则用 other
参数指定的值替换该元素。
参数
cond
:布尔条件,可以是布尔值、布尔数组、布尔 DataFrame 或布尔 Series。other
:可选参数,当条件为False
时使用的值。默认为NaN
。inplace
:布尔值,如果为True
,则直接在原 DataFrame 上进行修改,否则返回一个新的 DataFrame。默认为False
。axis
:指定轴,0
或'index'
表示按行,1
或'columns'
表示按列。默认为None
。level
:如果索引是多级索引,指定要使用的级别。默认为None
。
返回值
- 如果
inplace=False
,返回一个新的 DataFrame。 - 如果
inplace=True
,返回None
。
示例
假设我们有一个 DataFrame 如下:
import pandas as pd
import numpy as npdata = {'A': [1, 2, 3, 4],'B': [5, 6, 7, 8]
}df = pd.DataFrame(data)
print("原始 DataFrame:")
print(df)
输出:
原始 DataFrame:A B
0 1 5
1 2 6
2 3 7
3 4 8
示例 1:使用布尔条件替换值
将 A
列中大于 2 的值替换为 NaN
:
result = df.where(df['A'] <= 2)
print("\n将 A 列中大于 2 的值替换为 NaN:")
print(result)
输出:
将 A 列中大于 2 的值替换为 NaN:A B
0 1.0 5.0
1 2.0 6.0
2 NaN NaN
3 NaN NaN
示例 2:使用布尔条件和自定义替换值
将 A
列中大于 2 的值替换为 0
:
result = df.where(df['A'] <= 2, other=0)
print("\n将 A 列中大于 2 的值替换为 0:")
print(result)
输出:
将 A 列中大于 2 的值替换为 0:A B
0 1 5
1 2 6
2 0 0
3 0 0
示例 3:使用布尔 DataFrame 替换值
将 A
列中大于 2 的值替换为 NaN
,B
列中大于 6 的值替换为 NaN
:
cond = (df['A'] <= 2) & (df['B'] <= 6)
result = df.where(cond)
print("\n将 A 列中大于 2 的值和 B 列中大于 6 的值替换为 NaN:")
print(result)
输出:
将 A 列中大于 2 的值和 B 列中大于 6 的值替换为 NaN:A B
0 1.0 5.0
1 2.0 6.0
2 NaN NaN
3 NaN NaN
示例 4:使用 inplace=True
直接修改原 DataFrame
将 A
列中大于 2 的值替换为 0
,直接修改原 DataFrame:
df.where(df['A'] <= 2, other=0, inplace=True)
print("\n直接修改原 DataFrame:")
print(df)
输出:
直接修改原 DataFrame:A B
0 1 5
1 2 6
2 0 0
3 0 0
示例 5:使用多级索引
假设我们有一个多级索引的 DataFrame:
index = pd.MultiIndex.from_tuples([('a', 'x'), ('a', 'y'), ('b', 'x'), ('b', 'y')], names=['first', 'second'])
df = pd.DataFrame(data, index=index)
print("原始 DataFrame:")
print(df)
输出:
原始 DataFrame:A B
first second
a x 1 5y 2 6
b x 0 0y 0 0
使用 where
方法并指定 level
参数:
result = df.where(df['A'] <= 2, level='first')
print("\n使用 where 方法并指定 level 参数:")
print(result)
输出:
使用 where 方法并指定 level 参数:A B
first second
a x 1.0 5.0y 2.0 6.0
b x NaN NaNy NaN NaN
总结
pandas.DataFrame.where
方法提供了一种灵活的方式来根据条件筛选和替换 DataFrame 中的元素。你可以使用布尔条件、布尔数组或布尔 DataFrame 来指定哪些元素需要保留,哪些需要替换。通过 other
参数可以指定替换的值,默认为 NaN
。inplace
参数允许你选择是否直接修改原 DataFrame。这对于数据清洗和预处理非常有用。