📜  Python|熊猫索引.where(1)

📅  最后修改于: 2023-12-03 15:04:27.683000             🧑  作者: Mango

Python熊猫索引.where

简介

在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 |

注意事项
  • 可以将DataFrame作为参数传入,但此时需在axis参数中指定要替换的轴号。例如:df.where(cond, other=df2, axis=0)将会用df2中的元素替换df中满足条件的元素。
  • cond数组可以与要操作的DataFrame的索引/列索引保持一致,并且可以自动广播。如果要强制防止广播,请在cond中使用.reindex_like.reindex方法。
  • 使用where方法时,other参数中的标量、数组或DataFrame必须与要操作的DataFrame的大小一致。
  • 当指定了inplace=True时,返回值为None,表示原DataFrame被修改。