Короткий ответ
Количество пропусков по столбцам получают через df.isna().sum(), а долю — разделив на df.shape[0] или умножив на 100 для процентов.
Как это работает подробнее
isna() возвращает DataFrame той же формы из True/False, где True означает пропуск (NaN, None, NaT); sum() по умолчанию считает по столбцам (axis=0), складывая True как 1.
Пример кода
Пример Python
import pandas as pd
df = pd.DataFrame({'a': [1, None, 3], 'b': [None, None, 'x']})
missing = df.isna().sum()
missing_pct = (missing / len(df) * 100).round(1)
print(missing_pct)Что использовать на практике
- На практике: долю пропусков полезно смотреть именно в процентах и сортировать по убыванию, чтобы сразу увидеть самые проблемные столбцы; также стоит проверить isna().sum(axis=1), чтобы понять, есть ли строки с массовыми пропусками сразу по многим полям.
- Проверка: для столбца 'a' ожидается 33.3%, для 'b' — 66.7%, что соответствует количеству None в исходных данных.
Подводные камни
- Частые ошибки: считают df.isnull().sum() одинаковым для всех типов "пропусков", хотя пустая строка '' или строка "N/A" не распознаются как NaN и не попадут в счёт без предварительной нормализации значений; делают выводы о пропусках только по общему числу строк, не учитывая, что часть столбцов могла быть пропущена не случайно (например, скидка пустая, если скидки не было).