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