Метод mask
Метод mask применяется к Series и заменяет элементы, для которых переданное условие истинно, на указанное значение. Первым параметром передаётся условие (булев массив, функция или другой Series). Вторым параметром other задаётся значение для замены. Если условие ложно, элементы остаются без изменений.
Синтаксис
ser.mask(cond, other)
Пример
Заменим все числа, которые меньше 3, на значение 0:
import pandas as pd
ser = pd.Series([1, 2, 3, 4, 5])
res = ser.mask(ser < 3, 0)
print(res)
Результат выполнения кода:
0 0
1 0
2 3
3 4
4 5
dtype: int64
Пример
Заменим все элементы со значением 3 на 99. Условие можно передать с помощью оператора сравнения:
import pandas as pd
ser = pd.Series([1, 2, 3, 4, 5])
res = ser.mask(ser == 3, 99)
print(res)
Результат выполнения кода:
0 1
1 2
2 99
3 4
4 5
dtype: int64
Пример
В качестве значения для замены можно передать другой Series. Заменим значения на элементы из другого объекта по соответствующим индексам:
import pandas as pd
ser = pd.Series([1, 2, 3, 4, 5])
other = pd.Series([10, 20, 30, 40, 50])
res = ser.mask(ser > 3, other)
print(res)
Результат выполнения кода:
0 1
1 2
2 3
3 40
4 50
dtype: int64
Пример
Метод mask работает в том числе с пропущенными значениями. Заменим все пропуски на -1:
import pandas as pd
import numpy as np
ser = pd.Series([1, np.nan, 3, np.nan, 5])
res = ser.mask(ser.isna(), -1)
print(res)
Результат выполнения кода:
0 1.0
1 -1.0
2 3.0
3 -1.0
4 5.0
dtype: float64
Пример
Можно использовать строковые условия. Заменим все строки, которые содержат букву a, на строку found:
import pandas as pd
ser = pd.Series(['abcde', 'article', 'user', 'data.csv'])
res = ser.mask(ser.str.contains('a'), 'found')
print(res)
Результат выполнения кода:
0 found
1 found
2 user
3 found
dtype: object