web-dev-qa-db-de.com

Wie finde ich heraus, welche Spalten einen NaN-Wert in Pandas Dataframe (Python) enthalten?

Angenommen, ein Pandas-Datenrahmen enthält (möglicherweise) hier und dort verstreute NaN-Werte:

Frage: wie kann ich feststellen, welche Spalten NaN-Werte enthalten? Kann ich insbesondere eine Liste der Spaltennamen erhalten, die NaNs enthalten?

Vielen Dank

74
denvar

UPDATE: mit Pandas 0.22.0

Neuere Pandas-Versionen haben neue Methoden 'DataFrame.isna ()' und '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

als Liste der Spalten:

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

um diese Spalten auszuwählen (die mindestens einen NaN-Wert enthalten):

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

ALTE Antwort:

Verwenden Sie 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

oder als @root vorgeschlagene klarere Version:

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']

eine Teilmenge auswählen - alle Spalten, die mindestens einen NaN-Wert enthalten:

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
142
MaxU

Sie können df.isnull().sum() verwenden. Es zeigt alle Spalten und die gesamten NaNs jedes Features.

14
Matheus

Ich hatte ein Problem, bei dem ich zu viele Spalten hatte, um sie auf dem Bildschirm visuell zu untersuchen, so dass eine kurze Liste comp, die die störenden Spalten filtert und zurückgibt, ist

nan_cols = [i for i in df.columns if df[i].isnull().any()]

wenn das für jemanden hilfreich ist

1
Tom Wattley

Beides sollte funktionieren:

df.isnull().sum()
df.isna().sum()

DataFrame-Methoden isna() oder isnull() sind vollständig identisch.

Hinweis : Leere Zeichenfolgen '' wird als False (nicht als NA) betrachtet

0
prosti

ich verwende diese drei Codezeilen, um die Spaltennamen auszudrucken, die mindestens einen Nullwert enthalten:

for column in dataframe:
    if dataframe[column].isnull().any():
       print('{0} has {1} null values'.format(column, dataframe[column].isnull().sum()))
0
Frank