Выбор ответа Middle merge, join и concat обновлено

Фильтр после left merge

Вопрос

После m = orders.merge(users, on="user_id", how="left") написали m[m["city"] != "Москва"]. Что случится с заказами без клиента (city = NaN)?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: Они останутся, потому что NaN != "Москва" истинно. Сравнение != с NaN в pandas даёт True, поэтому строки без клиента останутся.

Варианты ответа

  1. Они пропадут, потому что NaN не равен вообще ничему
  2. Они останутся, потому что NaN != "Москва" истинноправильный ответ
  3. pandas выбросит TypeError сравнения строки с NaN
  4. Они получат city = "Москва" после заполнения

Разбор

Сравнение != с NaN в pandas даёт True, поэтому строки без клиента останутся. Ловушка с потерей строк бывает при == или isin, которые для NaN дают False: тогда left фактически превращается в inner. Ошибки нет, и подстановки значения тоже нет. Если NaN нужно обработать явно, используйте isna().

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

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