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.