pandas.DataFrame.mask#
- DataFrame.mask(cond, other=<no_default>, *, inplace=False, axis=None, level=None)[源代码]#
在条件为真时替换值。
- 参数:
- cond布尔 Series/DataFrame、类数组或可调用对象
在 cond 为 False 的地方,保留原始值。在为 True 的地方,用 other 中的相应值替换。如果 cond 是可调用的,它会在 Series/DataFrame 上计算,并应返回布尔 Series/DataFrame 或数组。可调用对象不能更改输入的 Series/DataFrame(尽管 pandas 不会检查这一点)。
- 其他标量、Series/DataFrame 或可调用对象
当 cond 为 True 时,条目将被替换为 other 中对应的值。如果 other 是可调用的,它将在 Series/DataFrame 上计算,并应返回标量或 Series/DataFrame。可调用对象不能更改输入的 Series/DataFrame(尽管 pandas 不会检查这一点)。如果未指定,条目将被填充为相应的 NULL 值(
np.nan
用于 numpy dtypes,pd.NA
用于扩展 dtypes)。- inplace布尔值, 默认为 False
是否对数据执行就地操作。
- 轴int, 默认为 None
如果需要,对齐轴。对于 Series,此参数未使用并默认为 0。
- 级别int, 默认为 None
如果需要,对齐级别。
- 返回:
- 系列或数据框或无
当应用于一个 Series 时,该函数将返回一个 Series,当应用于一个 DataFrame 时,它将返回一个 DataFrame;如果
inplace=True
,它将返回 None。
参见
DataFrame.where()
返回一个与调用者形状相同的对象。
Series.where()
返回一个与调用者形状相同的对象。
注释
mask 方法是对 if-then 惯用法的应用。对于调用者中的每个元素,如果
cond
是False
,则使用该元素;否则使用other
中相应的元素。如果other
的轴与cond
的轴不对齐,则cond
在未对齐索引位置的值将被填充为 True。Series.where()
或DataFrame.where()
的签名与numpy.where()
不同。大致上df1.where(m, df2)
等同于np.where(m, df1, df2)
。有关更多详细信息和示例,请参见 索引 中的
mask
文档。对象的 dtype 优先。如果可以无损转换,填充值会被转换为对象的 dtype。
例子
>>> s = pd.Series(range(5)) >>> s.where(s > 0) 0 NaN 1 1.0 2 2.0 3 3.0 4 4.0 dtype: float64 >>> s.mask(s > 0) 0 0.0 1 NaN 2 NaN 3 NaN 4 NaN dtype: float64
>>> s = pd.Series(range(5)) >>> t = pd.Series([True, False]) >>> s.where(t, 99) 0 0 1 99 2 99 3 99 4 99 dtype: int64 >>> s.mask(t, 99) 0 99 1 1 2 99 3 99 4 99 dtype: int64
>>> s.where(s > 1, 10) 0 10 1 10 2 2 3 3 4 4 dtype: int64 >>> s.mask(s > 1, 10) 0 0 1 1 2 10 3 10 4 10 dtype: int64
>>> df = pd.DataFrame(np.arange(10).reshape(-1, 2), columns=["A", "B"]) >>> df A B 0 0 1 1 2 3 2 4 5 3 6 7 4 8 9 >>> m = df % 3 == 0 >>> df.where(m, -df) A B 0 0 -1 1 -2 3 2 -4 -5 3 6 -7 4 -8 9 >>> df.where(m, -df) == np.where(m, df, -df) A B 0 True True 1 True True 2 True True 3 True True 4 True True >>> df.where(m, -df) == df.mask(~m, -df) A B 0 True True 1 True True 2 True True 3 True True 4 True True