Пустота со смыслом
Пустая ячейка выглядит как отсутствие информации. Но для аналитика это уже факт: значение почему-то не было записано. Причины могут быть совершенно разными. Псевдоним персонажа неизвестен. Измерение не проводили. Источник никогда не собирал это поле. Значение потерялось при переносе файла. Во всех случаях pandas покажет нам один и тот же NaN, хотя решения могут понадобиться разные.
Поэтому вопрос «чем заполнить пропуск?» появляется слишком рано. Сначала полезнее спросить: почему его нет и нужен ли этот признак для нашей задачи?
Иногда пустота прячется
В CSV отсутствие значения не обязано выглядеть как настоящий NaN. Встречаются пустые строки, -, N/A, unknown. Для человека они означают примерно одно и то же, а для программы могут быть обычными строками.
print(df["alias"].value_counts(dropna=False))
print(df["universe"].unique())
Именно поэтому перед обработкой пропусков сначала смотрят реальные варианты значений. Иначе можно получить странную ситуацию: часть отсутствующих данных уже посчитана как NaN, а часть продолжает жить среди обычных категорий.
Где пропуски встречаются — не менее важно, чем сколько их
Допустим, в некотором проекте данные собираются из нескольких систем. В одной из них признак пропущен в 35% строк, а во всех остальных — примерно в 2%. Общая медиана не объяснит, почему возникла такая разница. Более того, если сразу заполнить все пропуски, след проблемы почти исчезнет.
missing_by_source = (
df.groupby("source_system")["value"]
.apply(lambda s: s.isna().mean())
)
print(missing_by_source)
Такая картина заставляет сначала проверить процесс сбора данных: возможно, конкретная система не передаёт поле или делает это только при определённых условиях. Пропуск здесь становится не просто недостатком таблицы, а подсказкой о том, как устроен источник.