Пропущенные значения

Есть возможность посмотреть количество пропущенных значений в каждом признаке(столбце):

df.isna().sum()

Вот такой нужен конечный результат, только с признаками, в которых есть nan

Но это дает нам перечень всех столбцов. Как вывести только те столбцы(с количеством пропущенных значений), у которых есть пропущенные значения? Можно конечно сделать что-то вроде:

na_feat = [i for i in train.columns if train[i].isna().sum() != 0]    
for i in na_feat:
    print(i, train[i].isna().sum())

Но я делал это просто в одну строку и к сожалению забыл как именно(Фэйл!).


Ответы (1 шт):

Автор решения: MaxU

Вариант 1:

In [154]: df.isna().sum().to_frame(name="nans").query("nans > 0")["nans"]
Out[154]: 
b    1
c    3
Name: nans, dtype: int64

Вариант 2:

In [153]: df.loc[:, df.columns[df.isna().any()]].isna().sum()
Out[153]: 
b    1
c    3
dtype: int64

PS первый вариант более производительный потому, что только один раз вызывает df.isna() - это самая медленная операция и на больших фреймах разница может быть заметной.

→ Ссылка