pandas.DataFrame.mask 方法用于根据给定的条件替换 DataFrame 中的元素。它的工作方式类似于 where 方法,但 where 仅保留符合条件的值,而 mask 则替换符合条件的值。本文主要介绍一下Pandas中pandas.DataFrame.mask方法的使用。

DataFrame.mask(self, cond, other=nan, inplace=False, axis=None, level=None, errors='raise', try_cast=False) [source]

替换条件为True的值。

参数:       

condboolSeries/DataFrame

类似于数组或callable

如果condFalse,请保留原始值。

如果为True

则用other中的相应值替换。

如果cond是callable,

则它是在Series/DataFrame上计算的,

并且应返回布尔Series/DataFrame或数组。

可调用对象不得更改输入Series/DataFrame

(尽管pandas不会对其进行检查)。

otherscalar

Series/DataFrame或callable

condTrue的条目

将替换为other的相应值。

如果other是callable,

则在Series/DataFrame上对其进行计算,

并应返回scalarSeries/DataFrame

可调用对象不得更改输入Series/DataFrame

(尽管pandas不会对其进行检查)。

inplace: 布尔值,默认为False

是否对数据执行适当的操作。

axisint,默认值None

对齐轴(如果需要)。

levelint,默认值None

对齐级别(如果需要)。

errorsstr{'raise','ignore'}

默认值'raise'

请注意,当前此参数不会影响结果,

并且始终会强制转换为合适的dtype

1) 'raise':允许引发异常。

2) 'ignore':抑制异常。

错误时返回原始对象。

try_castbool,默认为False

尝试将结果转换回输入类型(如果可能)。

返回:

与调用者类型相同

Notes

mask方法是if-then惯用语的一种应用。对于在主叫DataFrame的每个元素中,如果condFalse的元素被使用; 否则,将使用DataFrame中的相应元素 other。

的签名DataFrame.where()不同于 numpy.where()df1.where(m, df2)大致相当于np.where(m, df1, df2)

有关更多详细信息和示例,请参见indexing中的mask文档 。

例子

1)用 NaN 替换大于 5 的值

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, 6, 3], 'B': [4, 7, 2]})
masked_df = df.mask(df > 5)
print(masked_df)

2)用 -1 替换小于 5 的值

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, 6, 3], 'B': [4, 7, 2]})
masked_df = df.mask(df < 5, -1)
print(masked_df)

3)使用 mask 结合 numpy 进行复杂替换

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, 6, 3], 'B': [4, 7, 2]})
masked_df = df.mask(df % 2 == 0, df * 10)
print(masked_df)

4)使用 mask 处理 NaN

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, np.nan, 3],
'B': [4, 5, np.nan]})
masked_df = df.mask(pd.isna(df), -1)
print(masked_df)

5)使用 mask 结合 lambda 进行条件替换

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, np.nan, 3],
'B': [4, 5, np.nan]})
masked_df = df.mask(lambda x: x > 3, 100)
print(masked_df)

6)mask()where() 对比

mask()当条件为 True 时替换值,where()当条件为 False 时替换值。

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, np.nan, 3],
'B': [4, 5, np.nan]})
df_mask = df.mask(df > 5, other=0)  # 大于5的变0
df_where = df.where(df > 5, other=0)  # 小于等于5的变0

print("mask 结果:\n", df_mask)
print("where 结果:\n", df_where)

推荐文档

相关文档

大家感兴趣的内容

随机列表