2016-05-21 3 views
4

Я пытаюсь распечатать или получить список имен столбцов с отсутствующими значениями. Например.Pandas: имя столбца печати с отсутствующими значениями

data1 data2 data3 
1  3  3 
2  NaN 5 
3  4  NaN 

Я хочу получить ['data2', 'data3']. я написал следующий код:

print('\n'.join(map(
    lambda x : str(x[1]) 
    ,(filter(lambda z: z[0] != False, zip(train.isnull().any(axis=0), train.columns.values))) 
))) 

Это хорошо работает, но я думаю, что должен быть более простой способ.

+0

Спасибо всем за ответы. Все они работают, но я решил проверить время выполнения. Я получил следующие значения: [седловины для седловине в df.columns, если ДФ [Col] .isnull() любая().] Время истекло: 0: 00: 00.391752 df.columns [df.isnull() .any()] Время истекло: 0: 00: 00,396459 df.loc [:, df.isnull() любая()] Время истекло:. 0: 00: 00,430103 я решил использовать второй вариант, потому что это короткий и быстрый оба. – LinearLeopard

ответ

17

df.isnull().any() генерирует булево массив (True, если столбец имеет значение, отсутствующее значение False в противном случае). Вы можете использовать его в качестве индекса в df.columns:

df.columns[df.isnull().any()] 

возвращает список столбцов, которые имеют пропущенные значения.


df = pd.DataFrame({'A': [1, 2, 3], 
        'B': [1, 2, np.nan], 
        'C': [4, 5, 6], 
        'D': [np.nan, np.nan, np.nan]}) 

df 
Out: 
    A B C D 
0 1 1.0 4 NaN 
1 2 2.0 5 NaN 
2 3 NaN 6 NaN 

df.columns[df.isnull().any()] 
Out: Index(['B', 'D'], dtype='object') 

df.columns[df.isnull().any()].tolist() # to get a list instead of an Index object 
Out: ['B', 'D'] 
5

Oneliner -

[col for col in df.columns if df[col].isnull().any()] 
Смежные вопросы