pandas.Series.mask#

Series.маска(условие, other=, *, inplace=False, axis=None, level=None)[источник]#

Заменить значения, где условие истинно.

Параметры:
условиебулев Series/DataFrame, массивоподобный объект или вызываемый объект

Где условие равно False, сохраняйте исходное значение. Где True, заменяйте соответствующим значением из other. Если условие является вызываемым, он вычисляется на Series/DataFrame и должен возвращать булев Series/DataFrame или массив. Вызываемый объект не должен изменять входной Series/DataFrame (хотя pandas не проверяет это).

otherскаляр, Series/DataFrame или вызываемый объект

Записи, где условие равны True, заменяются соответствующими значениями из other. Если other является вызываемым объектом, он вычисляется на Series/DataFrame и должен возвращать скаляр или Series/DataFrame. Вызываемый объект не должен изменять входные Series/DataFrame (хотя pandas не проверяет это). Если не указано, записи будут заполнены соответствующим NULL-значением (np.nan для типов данных numpy, pd.NA для расширенных типов данных).

inplacebool, по умолчанию False

Выполнять ли операцию на месте на данных.

осьint, по умолчанию None

Ось выравнивания при необходимости. Для Series этот параметр не используется и по умолчанию равен 0.

уровеньint, по умолчанию None

Уровень выравнивания при необходимости.

Возвращает:
Тот же тип, что у вызывающего объекта, или None, если inplace=True.

Смотрите также

DataFrame.where()

Вернуть объект той же формы, что и self.

Примечания

Метод mask — это применение идиомы if-then. Для каждого элемента в вызывающем DataFrame, если cond является False используется элемент; в противном случае соответствующий элемент из DataFrame other используется. Если ось other не выравнивается с осью cond Series/DataFrame, неправильно выровненные позиции индекса будут заполнены True.

Сигнатура для DataFrame.where() отличается от numpy.where(). Приблизительно df1.where(m, df2) эквивалентно np.where(m, df1, df2).

Для получения дополнительных подробностей и примеров см. mask документация в индексирование.

Тип данных объекта имеет приоритет. Заполняющее значение приводится к типу данных объекта, если это можно сделать без потерь.

Примеры

>>> 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