Ответ вслух Middle Выборка и фильтрация спрашивают часто обновлено

Как фильтровать DataFrame без сюрпризов

Вопрос

Расскажите, как вы фильтруете DataFrame по сложным условиям и меняете значения по условию. Какие ошибки встречали?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Фильтр строю булевой маской: условия в скобках, связываю &, , отрицаю . Для частых случаев есть готовые методы: isin для списка значений, between для диапазона (границы включаются), str.contains для подстроки с na=False.

Что должно прозвучать в ответе

  • Булева маска через `&`, `|`, `~` и скобки

  • `isin`, `between`, `str.contains`, `query` для читаемости

  • Изменение по условию одним шагом через `loc[маска, колонка]`

  • Цепочное присваивание не работает при Copy-on-Write

  • NaN даёт False в любом сравнении, отрицание маски тащит пропуски

  • После фильтра индекс с дырами: iloc против loc, `reset_index(drop=True)`

Что могут спросить следом

  • Почему and вместо & падает?
  • Чем query лучше или хуже маски?
  • Как условно задать значение из трёх вариантов?

Разбор

Фильтр строю булевой маской: условия в скобках, связываю &, |, отрицаю ~. Для частых случаев есть готовые методы: isin для списка значений, between для диапазона (границы включаются), str.contains для подстроки с na=False. Длинные условия иногда пишу в query, там можно сослаться на переменную через @. Значения по условию меняю одним вызовом df.loc[mask, "col"] = value, а для нескольких веток беру np.select или np.where. Ошибки, которые встречал: цепочное присваивание, которое в pandas 3.0 молча ничего не меняет; пропуски, которые после ~ неожиданно попадают в выборку, поэтому решаю судьбу NaN явно; и путаница loc и iloc после фильтра, когда индекс уже с дырами. Если дальше нужна позиционная работа, делаю reset_index(drop=True).

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме