РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
29 of 687 menu

Метод where

Метод where применяется к DataFrame и возвращает объект того же размера, где элементы, не удовлетворяющие условию, заменяются на другое значение. Первым параметром передаётся условие, вторым - значение, которым будут заменены элементы, для которых условие ложно. Если второй параметр не указан, используется NaN. Метод работает аналогично функции np.where, но сохраняет индексы и структуру исходного DataFrame.

Синтаксис

df.where(cond, other=nan, inplace=False, axis=None, level=None)

Основные параметры:

  • cond - условие (булев массив, вызываемая функция или Series), по которому проверяются значения
  • other - значение для замены (по умолчанию NaN)
  • inplace - если True, изменяет исходный объект
  • axis - ось для применения условия (0 - строки, 1 - столбцы)
  • level - уровень для многомерных индексов

Пример

Давайте заменим все значения меньше 3 на 0:

import pandas as pd df = pd.DataFrame({ 'a': [1, 2, 3, 4, 5], 'b': [10, 20, 30, 40, 50] }) res = df.where(df >= 3, 0) print(res)

Результат выполнения кода:

a b 0 0 10 1 0 20 2 3 30 3 4 40 4 5 50

В первом столбце значения 1 и 2 заменены на 0, так как они меньше 3. Второй столбец не изменился, поскольку все его значения удовлетворяют условию.

Пример

Если не указать второе значение, заменяться будет на NaN:

import pandas as pd df = pd.DataFrame({ 'a': [1, 2, 3, 4, 5], 'b': [10, 20, 30, 40, 50] }) res = df.where(df % 2 == 0) print(res)

Результат выполнения кода:

a b 0 NaN 10.0 1 2.0 20.0 2 NaN NaN 3 4.0 40.0 4 NaN NaN

Чётные числа остались без изменений, а все нечётные заменены на NaN.

Пример

Метод where можно применять с функцией в качестве условия:

import pandas as pd df = pd.DataFrame({ 'a': [1, 2, 3, 4, 5], 'b': [10, 20, 30, 40, 50] }) res = df.where(lambda x: x > x.mean(), -999) print(res)

Результат выполнения кода:

a b 0 -999 10.0 1 -999 20.0 2 -999 30.0 3 4.0 40.0 4 5.0 50.0

Значения, превышающие среднее по столбцу, остались, остальные заменены на -999.

Пример

Используем параметр axis для применения условия по строкам:

import pandas as pd df = pd.DataFrame({ 'a': [1, 2, 3, 4, 5], 'b': [10, 20, 30, 40, 50] }) res = df.where(df > df.mean(axis=1), 0, axis=0) print(res)

Результат выполнения кода:

a b 0 0 10 1 0 20 2 0 30 3 0 40 4 0 50

Здесь условие проверялось построчно: значения, не превышающие среднее по строке, заменены на 0.

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

  • метод mask,
    который заменяет значения, удовлетворяющие условию
  • метод replace,
    который заменяет указанные значения
  • метод clip,
    который ограничивает значения диапазоном
  • метод fillna,
    который заполняет пропущенные значения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить