DataFrame.mask() / Series.mask()
Метод mask() заменяет значения там, где условие истинно (True). Это «зеркало» метода where(), который заменяет там, где условие ложно.
Сигнатура
DataFrame.mask(cond, other=nan, *, inplace=False, axis=None,
level=None)
Параметры
cond— булева маска того же размера, что и объект, либо callable.other— значение/массив/callable для подстановки в местахTrue. По умолчаниюNaN.inplace— изменить объект на месте.axis,level— направление и уровень для выравнивания.
Возвращаемое значение
Объект того же типа с заменёнными значениями.
Примеры
Пример 1. Замена больших значений на NaN
import pandas as pd
s = pd.Series([22, 80, 23, 95, 24])
print(s.mask(s > 50))
0 22.0
1 NaN
2 23.0
3 NaN
4 24.0
dtype: float64
Пример 2. Замена на другое значение
import pandas as pd
s = pd.Series([22, 80, 23, 95, 24])
print(s.mask(s > 50, other=-1))
0 22
1 -1
2 23
3 -1
4 24
dtype: int64
Пример 3. DataFrame
Скрываем показания датчиков с отрицательными значениями (ошибки):
import pandas as pd
df = pd.DataFrame({
"t_a": [22.0, -99.0, 21.5],
"t_b": [23.0, 22.5, -99.0],
})
print(df.mask(df < 0))
t_a t_b
0 22.0 23.0
1 NaN 22.5
2 21.5 NaN
Пример 4. Маска как callable
import pandas as pd
df = pd.DataFrame({"x": [1, 5, 10, 15]})
print(df.mask(lambda d: d["x"] > 7, other=0))
x
0 1
1 5
2 0
3 0
Пример 5. mask vs where
import pandas as pd
s = pd.Series([1, 2, 3, 4, 5])
print(s.mask(s > 3))
print(s.where(s > 3))
0 1.0
1 2.0
2 3.0
3 NaN
4 NaN
dtype: float64
0 NaN
1 NaN
2 NaN
3 4.0
4 5.0
dtype: float64
См. также
Примечание
Лицензия и источники
Техническое описание функции адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Примеры и пояснения — © AlashEd Wiki.