Ich habe die folgende df
in Pandas.
0 A B C
1 2 NaN 8
Wie kann ich überprüfen, ob df.iloc[1]['B']
NaN ist?
Ich habe es mit df.isnan()
ausprobiert und bekomme eine Tabelle wie diese:
0 A B C
1 false true false
ich bin mir jedoch nicht sicher, wie die Tabelle indiziert werden soll und ob dies eine effiziente Möglichkeit ist, die Aufgabe überhaupt auszuführen?
jezrael Antwort ist genau das Richtige. Wenn Sie sich nur mit dem NaN-Wert beschäftigen, habe ich nach einer schnelleren Option gesucht, da nach meiner Erfahrung das Summieren von flachen Arrays (seltsamerweise) schneller ist als das Zählen. Dieser Code scheint schneller zu sein:
df.isnull().values.any()
Zum Beispiel:
In [2]: df = pd.DataFrame(np.random.randn(1000,1000))
In [3]: df[df > 0.9] = pd.np.nan
In [4]: %timeit df.isnull().any().any()
100 loops, best of 3: 14.7 ms per loop
In [5]: %timeit df.isnull().values.sum()
100 loops, best of 3: 2.15 ms per loop
In [6]: %timeit df.isnull().sum().sum()
100 loops, best of 3: 18 ms per loop
In [7]: %timeit df.isnull().values.any()
1000 loops, best of 3: 948 µs per loop
Wenn Sie in einer bestimmten Spalte nach den Indizes für NaN suchen, können Sie diese verwenden
list(df['B'].index[df['B'].apply(np.isnan)])
Wenn Sie die Indizes aller möglichen NaN-Werte im Datenrahmen abrufen möchten, können Sie Folgendes tun
row_col_indexes = list(map(list, np.where(np.isnan(np.array(df)))))
indexes = []
for i in Zip(row_col_indexes[0], row_col_indexes[1]):
indexes.append(list(i))
Und wenn Sie nach einem Einliner suchen, können Sie Folgendes verwenden:
list(Zip(*[x for x in list(map(list, np.where(np.isnan(np.array(df)))))]))