Antworten:
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:
Versuchen Sie, isnull () zu verwenden :
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 von @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']
So wählen Sie eine Teilmenge aus - 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
df.columns[df.isin['xxx'].any()].tolist()
df.columns[df.eq(search_for_value).any()].tolist()
isna
, notna
?
Ich hatte ein Problem, bei dem ich zu viele Spalten hatte, um sie auf dem Bildschirm visuell zu überprüfen, sodass eine kurze Liste erstellt wurde, die die fehlerhaften Spalten filtert und zurückgibt
nan_cols = [i for i in df.columns if df[i].isnull().any()]
wenn das für jemanden hilfreich ist
In Datasets mit einer großen Anzahl von Spalten ist es noch besser zu sehen, wie viele Spalten Nullwerte enthalten und wie viele nicht.
print("No. of columns containing null values")
print(len(df.columns[df.isna().any()]))
print("No. of columns not containing null values")
print(len(df.columns[df.notna().all()]))
print("Total no. of columns in the dataframe")
print(len(df.columns))
Zum Beispiel enthielt es in meinem Datenrahmen 82 Spalten, von denen 19 mindestens einen Nullwert enthielten.
Außerdem können Sie Spalten und Zeilen automatisch entfernen, je nachdem, welche mehr Nullwerte haben.
Hier ist der Code, der dies intelligent macht:
df = df.drop(df.columns[df.isna().sum()>len(df.columns)],axis = 1)
df = df.dropna(axis = 0).reset_index(drop=True)
Hinweis: Der obige Code entfernt alle Ihre Nullwerte. Wenn Sie Nullwerte möchten, verarbeiten Sie diese zuvor.
Das hat bei mir funktioniert,
1. Zum Abrufen von Spalten mit mindestens 1 Nullwert. (Spaltennamen)
data.columns[data.isnull().any()]
2. Zum Abrufen von Spalten mit Anzahl mit mindestens 1 Nullwert.
data[data.columns[data.isnull().any()]].isnull().sum()
[Optional] 3. Zum Abrufen des Prozentsatzes der Nullanzahl.
data[data.columns[data.isnull().any()]].isnull().sum() * 100 / data.shape[0]
df.isna().any()[lambda x: x]
arbeitet für mich