DataFrame.mask(self, cond, other=nan, inplace=False, axis=None, level=None, errors='raise', try_cast=False) [source]
替换条件为True的值。
参数: | cond: 类似于数组或callable 如果 如果为 则用 如果 则它是在 并且应返回布尔 可调用对象不得更改输入 (尽管pandas不会对其进行检查)。 other:
将替换为 如果 则在 并应返回 可调用对象不得更改输入 (尽管pandas不会对其进行检查)。 inplace: 布尔值,默认为 是否对数据执行适当的操作。 axis: 对齐轴(如果需要)。 level: 对齐级别(如果需要)。 errors: 默认值 请注意,当前此参数不会影响结果, 并且始终会强制转换为合适的 1) 2) 错误时返回原始对象。 try_cast: 尝试将结果转换回输入类型(如果可能)。 |
返回: | 与调用者类型相同 |
Notes
mask
方法是if-then
惯用语的一种应用。对于在主叫DataFrame的每个元素中,如果cond
是False
的元素被使用; 否则,将使用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)