📅  最后修改于: 2023-12-03 15:04:27.683000             🧑  作者: Mango
在Pandas中,可以使用where
方法筛选数据。该方法将满足条件的数据替换为NaN
,不满足条件的数据保持原有的值。
pandas.DataFrame.where(cond, other=nan, inplace=False, axis=None, level=None, errors='raise', try_cast=False)
参数说明:
cond
:筛选条件,返回布尔值(True/False)或布尔值数组。other
:替代值,可以是标量、数组或DataFrame类型。inplace
:是否原地修改Dataframe,False为默认值,即不修改。axis
:指定操作的轴(0为行,1为列)。level
:针对多重索引(MultiIndex),控制在哪个级别进行比较。errors
:指定当cond
中出现NA/NaN值时的行为。'raise'为默认值,表示抛出异常;'coerce'表示将NA/NaN视为False,但不会抛出异常;'ignore'表示不处理NA/NaN值。try_cast
:将other尝试强制转换成与原始DataFrame相同的类型。假设有以下数据:
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [1, 2, 3], 'B': ['one', 'two', 'three']})
现在我们想把其中A列中大于1的元素替换为NaN,可以用如下代码:
df.where(df['A'] > 1, np.nan)
输出结果:
| | A | B | |---:|----:|:------| | 0 | NaN | nan | | 1 | 2 | two | | 2 | 3 | three |
此时,第0行的A列满足条件,被替换为了NaN,其他行符合条件,保持原有值。
如果我们想在原DataFrame中修改,可以将inplace
参数设为True:
df.where(df['A'] > 1, np.nan, inplace=True)
除了将条件限制在一列上,我们也可以将多个条件合并使用。例如,我们想要把A列中大于1且B列中等于'two'的元素变为NaN,可以用以下代码:
df.where((df['A'] > 1) & (df['B'] == 'two'), np.nan)
输出结果:
| | A | B | |---:|----:|:-----| | 0 | NaN | nan | | 1 | 2 | two | | 2 | NaN | nan |
axis
参数中指定要替换的轴号。例如:df.where(cond, other=df2, axis=0)
将会用df2
中的元素替换df
中满足条件的元素。cond
数组可以与要操作的DataFrame的索引/列索引保持一致,并且可以自动广播。如果要强制防止广播,请在cond
中使用.reindex_like
或.reindex
方法。where
方法时,other
参数中的标量、数组或DataFrame必须与要操作的DataFrame的大小一致。