DataFrame.where() / Series.where()

Метод where() оставляет значения, удовлетворяющие условию, а остальные заменяет (по умолчанию на NaN). Это «противоположность» mask(): where сохраняет там, где условие истинно. Удобно при фильтрации выбросов или нормализации данных с датчиков.

Сигнатура

DataFrame.where(cond, other=NaN, inplace=False, axis=None, level=None)
Series.where(cond, other=NaN, inplace=False, axis=None, level=None)

Параметры

  • cond — булева маска (Series/DataFrame/массив/callable) того же размера.

  • other — чем заменять, где условие False. Скаляр, Series, DataFrame или callable.

  • inplace — менять ли исходник.

  • axis — направление выравнивания, если cond имеет другую ось.

Возвращаемое значение

Новый объект того же типа (или None при inplace=True).

Примеры

Пример 1. Замена на NaN при невыполнении условия

import pandas as pd

s = pd.Series([10, -5, 20, -1, 30])
print(s.where(s > 0))
0    10.0
1     NaN
2    20.0
3     NaN
4    30.0
dtype: float64

Пример 2. Замена на другое значение

import pandas as pd

s = pd.Series([23, 24, 100, 25, 99])
print(s.where(s < 30, other=0))
0    23
1    24
2     0
3    25
4     0
dtype: int64

Пример 3. Фильтрация выбросов в DataFrame

import pandas as pd

df = pd.DataFrame({
    "temp": [23.5, 24.0, 999.0, 23.8],
    "hum": [45, 50, 48, 47],
})
clean = df.where(df["temp"] < 100)
print(clean)
   temp   hum
0  23.5  45.0
1  24.0  50.0
2   NaN   NaN
3  23.8  47.0

Пример 4. С другим Series в качестве замены

import pandas as pd

actual = pd.Series([10, 20, 30, 40])
backup = pd.Series([100, 200, 300, 400])
mask = pd.Series([True, False, True, False])
print(actual.where(mask, backup))
0     10
1    200
2     30
3    400
dtype: int64

Пример 5. inplace модификация

import pandas as pd

df = pd.DataFrame({"v": [1, -2, 3, -4]})
df.where(df["v"] > 0, other=0, inplace=True)
print(df)
   v
0  1
1  0
2  3
3  0

См. также

Примечание

Лицензия и источники

Техническое описание функции адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Примеры и пояснения — © AlashEd Wiki.