Короткий ответ
В SQL пропуски ищут через IS NULL/IS NOT NULL и считают их долю агрегатными функциями; в pandas для этого есть .isna(), .isnull() и .info(), показывающие количество непустых значений по колонкам.
Как это работает подробнее
NULL в SQL — это не 0 и не пустая строка, а отсутствие значения, поэтому обычные сравнения (= NULL) не работают и нужно использовать специальные операторы. В pandas пропуски чаще всего представлены как NaN (для числовых типов) или None.
Пример кода
Пример на SQL
-- PostgreSQL
SELECT
COUNT(*) AS total_rows,
COUNT(*) - COUNT(email) AS missing_email
FROM users;Что использовать на практике
- На практике: перед любым агрегированием стоит явно посчитать долю пропусков по каждой важной колонке — это первый шаг проверки качества данных. Также важно понять причину пропуска: техническая ошибка сбора, значение действительно отсутствует (например, у гостя нет email) или это код «не применимо», замаскированный под 0 или пустую строку. Также полезно проверять пропуски не только по отдельным колонкам, но и по комбинациям (например, доля строк, где одновременно пропущены email и телефон), что может указывать на отдельный сегмент пользователей.
- Проверка: сравнить
missing_emailиз SQL с результатомdf['email'].isna().sum()в pandas — числа должны совпасть.
Подводные камни
- Частые ошибки: фильтровать
WHERE column = NULLвместоWHERE column IS NULL(это не вернёт ожидаемый результат); молча отбрасывать строки с пропусками черезdropna()без оценки, сколько данных теряется и не вносит ли это смещение; путать пустую строку''сNULL— это разные значения. Ещё одна ошибка — автоматически заполнять пропуски средним или нулём без анализа причины пропуска, что может исказить последующий анализ.