2016-03-25 21 views

risposta

76

UPDATE: usando Pandas 0.22.0

recenti versioni Pandas hanno nuovi metodi 'DataFrame.isna()' e 'DataFrame.notna()'

In [71]: df 
Out[71]: 
    a b c 
0 NaN 7.0 0 
1 0.0 NaN 4 
2 2.0 NaN 4 
3 1.0 7.0 0 
4 1.0 3.0 9 
5 7.0 4.0 9 
6 2.0 6.0 9 
7 9.0 6.0 4 
8 3.0 0.0 9 
9 9.0 0.0 1 

In [72]: df.isna().any() 
Out[72]: 
a  True 
b  True 
c False 
dtype: bool 

come elenco di colonne:

In [74]: df.columns[df.isna().any()].tolist() 
Out[74]: ['a', 'b'] 

per selezionare le colonne (contenenti almeno un valore NaN):

In [73]: df.loc[:, df.isna().any()] 
Out[73]: 
    a b 
0 NaN 7.0 
1 0.0 NaN 
2 2.0 NaN 
3 1.0 7.0 
4 1.0 3.0 
5 7.0 4.0 
6 2.0 6.0 
7 9.0 6.0 
8 3.0 0.0 
9 9.0 0.0 

risposta OLD:

tenta di utilizzare isnull():

In [97]: df 
Out[97]: 
    a b c 
0 NaN 7.0 0 
1 0.0 NaN 4 
2 2.0 NaN 4 
3 1.0 7.0 0 
4 1.0 3.0 9 
5 7.0 4.0 9 
6 2.0 6.0 9 
7 9.0 6.0 4 
8 3.0 0.0 9 
9 9.0 0.0 1 

In [98]: pd.isnull(df).sum() > 0 
Out[98]: 
a  True 
b  True 
c False 
dtype: bool 

o come @root proposto versione più chiara:

In [5]: df.isnull().any() 
Out[5]: 
a  True 
b  True 
c False 
dtype: bool 

In [7]: df.columns[df.isnull().any()].tolist() 
Out[7]: ['a', 'b'] 

per selezionare un sottoinsieme - tutte le colonne contenenti almeno un NaN valore:

In [31]: df.loc[:, df.isnull().any()] 
Out[31]: 
    a b 
0 NaN 7.0 
1 0.0 NaN 
2 2.0 NaN 
3 1.0 7.0 
4 1.0 3.0 
5 7.0 4.0 
6 2.0 6.0 
7 9.0 6.0 
8 3.0 0.0 
9 9.0 0.0 
+0

Grazie per la risposta! Sto cercando di ottenere un elenco dei nomi delle colonne (ho aggiornato la mia domanda di conseguenza), sai come? – denvar

+1

già nella risposta ln [7] sopra –

+1

Ciao @AzizAlto, sì la risposta è stata aggiornata dopo aver aggiornato la mia domanda. – denvar

4

È possibile utilizzare df.isnull().sum(). Mostra tutte le colonne e i NaN totali di ciascuna funzione.