📅  最后修改于: 2023-12-03 15:04:26.722000             🧑  作者: Mango
DataFrame.mask()
是 Pandas 库中 DataFrame 类的一种方法,可以用于将 DataFrame 中满足指定条件的元素替换为指定值。该方法的作用类似于 DataFrame 中的布尔索引,但是可以直接替换匹配的元素,而无需通过布尔索引进行选取和修改。
DataFrame.mask(cond, other=nan, inplace=False, axis=None, level=None, errors='raise', try_cast=False)
cond
:指定的条件,可以是一个函数(函数返回值是处理后的值)或布尔型数组(相同长度的 DataFrame 或 Series)。该条件会作用于整个 DataFrame 或选定的列。如果该参数是函数,则该函数应该从输入值中返回应该将该值替换为的新值,否则将应用 other
参数中的值替换。other
:指定替换条件不满足的值。如果该参数是一个 DataFrame,则替换失败的元素将根据该 DataFrame 进行替换。如果该参数是一个标量,则替换失败的元素将根据该标量进行替换。默认为 nan
。inplace
:指示是否原地替换 DataFrame,而不是返回新的 DataFrame。默认为 False
。axis
:指定应用条件的轴。可以是 0 或 1。level
:指定要在哪个多层次索引级别上处理数据。errors
:指定对包含无效值的组的处理方式。可以设置为 'raise'(默认值,引发异常)、 'ignore'(跳过该组)或 'coerce'(尝试将无效值转换为 NaN 值)。try_cast
:指示是否尝试将替换结果强制转换为源 DataFrame 的数据类型。默认为 False
。import pandas as pd
data = {'name': ['Alice', 'Bill', 'Cathy', 'David', 'Eva'],
'age': [25, 32, 18, 45, 27],
'gender': ['F', 'M', 'F', 'M', 'F'],
'income': [6800, 7400, 5500, 3700, 4900]}
df = pd.DataFrame(data)
# 将 age 列中小于 20 的元素替换为 20
df_new = df.mask(df['age'] < 20, 20)
print(df_new)
输出结果:
name age gender income
0 Alice 25 F 6800
1 Bill 32 M 7400
2 Cathy 20 F 5500
3 David 45 M 3700
4 Eva 27 F 4900
# 将 income 列中大于 5000 的元素替换为 5000
df_masked = df.mask(df['income'] > 5000, other=5000, inplace=False, axis=0, level=None, errors='raise', try_cast=False)
print(df_masked)
输出结果:
name age gender income
0 Alice 25 F 5000
1 Bill 32 M 5000
2 Cathy 18 F 5000
3 David 45 M 3700
4 Eva 27 F 4900
# 将 age 列中的奇数值替换为 0
df_func = df.mask(lambda x: x % 2 != 0, 0)
print(df_func)
输出结果:
name age gender income
0 Alice 0 F 6800
1 Bill 32 M 0
2 Cathy 0 F 5500
3 David 0 M 0
4 Eva 0 F 4900
DataFrame.mask()
方法是 Pandas 对 DataFrame 类的一种扩展,功能类似于布尔索引。mask()
方法根据自定义条件快速替换匹配的元素。inplace
和 try_cast
,可以控制 DataFrame 的替换方式以及结果的数据类型。