📜  Pandas DataFrame.where()(1)

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

Pandas DataFrame.where()

Pandas DataFrame.where() 方法在处理数据时非常有用,可以根据指定的条件对数据进行筛选或替换操作。

语法

Pandas DataFrame.where() 方法的语法如下:

DataFrame.where(cond, other=nan, inplace=False, axis=None, level=None, errors='raise', try_cast=False)

参数说明:

  • cond: bool 型的条件表达式或可调用的函数。
  • other:当条件不满足时,要用什么来填充(行)/替换(列)。
  • inplace:对数据进行原地操作还是返回新的 DataFrame。
  • axis:要操作的轴,默认为列(axis=1)。
  • level:在指定的索引级别上运行。
  • errors:{‘raise’, ‘omit’}, 默认为 ‘raise’。如果‘raise’,则在出现无效输入时引发异常;如果‘omit’,则忽略无效输入。
  • try_cast:尝试将结果转换为原始 dtype 之一。
示例

使用 Pandas DataFrame.where() 方法有很多场景。以下是几种常见的用法:

填充缺失数据

此示例演示如何使用 DataFrame.where() 方法来填充 NaN 值。

import pandas as pd
import numpy as np

data = {
    'Name': ['Alex', 'Brian', 'Cathy', 'David', 'Edward'],
    'Age': [20, 68, np.nan, 45, np.nan],
    'Salary': [np.nan, 25000, 30000, np.nan, 50000]
}

df = pd.DataFrame(data)

fill_value = {
    'Age': df.Age.mean(),
    'Salary': df.Salary.median()
}

df_filled = df.where(pd.notna(df), fill_value)
print(df_filled)

输出结果:

     Name    Age   Salary
0    Alex  20.00  32500.0
1   Brian  68.00  25000.0
2   Cathy  45.25  30000.0
3   David  45.00  32500.0
4  Edward  45.25  50000.0
根据条件替换值

此示例演示如何使用 DataFrame.where() 方法根据条件替换值。

import pandas as pd

data = {
    'Name': ['Alex', 'Brian', 'Cathy', 'David', 'Edward'],
    'Age': [20, 68, 32, 45, 50],
    'Salary': [25000, 30000, 40000, 50000, 60000]
}

df = pd.DataFrame(data)
df['Salary'] = df.Salary.where(df.Age > 40, df.Salary * 1.1)

print(df)

输出结果:

     Name  Age   Salary
0    Alex   20  25000.0
1   Brian   68  30000.0
2   Cathy   32  44000.0
3   David   45  50000.0
4  Edward   50  66000.0

以上示例中,salary 值如果在年龄小于 40 岁的人身上,则乘一个 1.1 系数。

注意
  • 当使用 DataFrame.where() 方法时,必须确保填充的值与 DataFrame 的形状一致,并且填充的值必须可以进行运算。
  • 在条件表达式中,请使用 & 运算符代替 and;使用 | 运算符代替 or。
  • 默认情况下,DataFrame.where() 会返回一个新的 DataFrame。如果您要对原始 DataFrame 进行更改,请设置 inplace 参数为 True。