Что такое NaN и в каких случаях он возникает
Что проверяют
Понимаете ли вы, что NaN это не «пустая ячейка», а значение стандарта IEEE 754 с особыми правилами сравнения, и умеете ли обращаться с пропусками так, чтобы они не протекли в модель незаметно. Для работы с данными это ежедневная тема: половина странных метрик качества растёт из неаккуратной обработки пропусков.
Как отвечать
NaN это специальное значение с плавающей точкой, обозначающее результат неопределённой операции или отсутствие числа. Главное свойство: оно не равно ничему, включая само себя.
import numpy as np, pandas as pd
np.nan == np.nan # False
pd.isna(np.nan) # True
np.array([1.0, 0.0]) / 0 # inf и nan, ноль на ноль неопределён
pd.to_numeric(pd.Series(["7", "abc"]), errors="coerce") # 7.0 и NaNОткуда берётся: неопределённые операции над вещественными числами (ноль на ноль, разность бесконечностей, корень из отрицательного), чтение сырых выгрузок с пустыми полями, приведение нечисловых строк с флагом coerce, соединение таблиц, где ключ нашёлся не везде, сдвиги и изменение индекса, а дальше распространение по любой арифметике.
Затем про обработку: сначала природа пропуска (не собирали, датчик молчал, поле необязательное), потом стратегия. Удалить строки, заполнить константой или статистикой, оставить как есть и добавить признак-флаг, отдать модели, которая умеет с пропусками работать сама.
Где спотыкаются
Ищут пропуски сравнением с NaN. Такой фильтр всегда пуст, потому что равенство с NaN ложно по стандарту; работает только проверка вида isna или isnull.
Не различают NaN, None и пропуск по типу. NaN вещественный, поэтому колонка целых с одним пропуском становится вещественной, идентификаторы теряют точность, а маркер отсутствующей даты это отдельное значение. Для целых с пропусками существуют типы с поддержкой NA.
Заполняют средним по всему набору до разбиения на обучение и контроль. Статистику считают только на обучающей части и переносят на остальные, иначе информация из контроля протекает в признаки и оценка качества оказывается завышенной.