Короткий ответ
Сводку строят через (df.isna().mean() * 100).sort_values(ascending=False), что сразу даёт процент пропусков по каждому столбцу, упорядоченный от самого проблемного к наименее проблемному.
Как это работает подробнее
isna() даёт булев DataFrame, mean() по столбцам (axis=0 по умолчанию) считает долю True, так как True интерпретируется как 1, а False как 0; умножение на 100 переводит долю в проценты, а sort_values упорядочивает результат.
Пример кода
Пример Python
import pandas as pd
df = pd.DataFrame({'a': [1, None, 3, None], 'b': [1, 2, None, 4], 'c': [1, 2, 3, 4]})
summary = (df.isna().mean() * 100).round(1).sort_values(ascending=False)
print(summary)Что использовать на практике
- На практике: такую сводку обычно делают первым шагом при знакомстве с новой таблицей, чтобы сразу расставить приоритеты очистки данных; полезно также вывести её как DataFrame с двумя столбцами (имя столбца и процент), а не как Series, если планируется дальше использовать в отчёте.
- Проверка: для столбца 'a' ожидается 50.0, для 'b' — 25.0, для 'c' — 0.0, и порядок вывода должен быть именно a, b, c по убыванию доли пропусков.
Подводные камни
- Частые ошибки: считают долю пропусков от неправильного знаменателя, например, от числа непустых значений другого столбца, а не от общего числа строк df.shape[0]; интерпретируют 0% пропусков как "данные полностью корректны", хотя могут быть скрытые пропуски в виде пустых строк, нулей или специальных кодов.