Ich habe einen Pandas DataFrame wie diesen:
a b
2011-01-01 00:00:00 1.883381 -0.416629
2011-01-01 01:00:00 0.149948 -1.782170
2011-01-01 02:00:00 -0.407604 0.314168
2011-01-01 03:00:00 1.452354 NaN
2011-01-01 04:00:00 -1.224869 -0.947457
2011-01-01 05:00:00 0.498326 0.070416
2011-01-01 06:00:00 0.401665 NaN
2011-01-01 07:00:00 -0.019766 0.533641
2011-01-01 08:00:00 -1.101303 -1.408561
2011-01-01 09:00:00 1.671795 -0.764629
Gibt es eine effiziente Möglichkeit, den "Integer" -Index von Zeilen mit NaNs zu ermitteln? In diesem Fall sollte die gewünschte Ausgabe sein [3, 6]
.
df[np.isnan(df['b'])]
numpy
's zu verwendenisnan
, können Sie auch verwendendf['b'].isnull()
Antworten:
Für DataFrame
df
:gibt Ihnen das zurück, in das Sie zurück
MultiIndex
indizieren könnendf
, z. B.:Für den Integer-Index:
quelle
ix
Klänge, aus einigen Gründen klingt es so, als wäre es zugunsten voniloc
Hier ist eine einfachere Lösung:
inds = pd.isnull(df).any(1).nonzero()[0]
quelle
np.where(df['b'].notnull())[0]
.nonzero()[0]
ist besser als[i for i, k in enumerate(mask) if k]
.)r, _ = np.where(df.isna())
.to_numpy()
, um zuerst in numpy Array zu konvertieren -pd.isnull(df).any(1).to_numpy().nonzero()
Einzeilige Lösung. Es funktioniert jedoch nur für eine Spalte.
quelle
list(...)
wielist(df.loc[pandas.isna(df["b"]), :].index)
Und für den Fall, dass Sie stattdessen die Koordinaten von 'nan' für alle Spalten ermitteln möchten (vorausgesetzt, es handelt sich um alle Zahlen), können Sie Folgendes tun:
quelle
Ich weiß nicht, ob dies zu spät ist, aber Sie können np.where verwenden, um die Indizes von Nichtwerten als solche zu finden:
quelle
Hier sind Tests für einige Methoden:
Und ihre entsprechenden Timings:
Es scheint, dass
pd.isnull(df['DRGWeight']).nonzero()[0]
der Tag in Bezug auf das Timing gewinnt, aber dass jede der drei Top-Methoden eine vergleichbare Leistung aufweist.quelle
Wenn Sie einen Datums- / Uhrzeitindex haben und die Werte haben möchten:
quelle
Eine andere einfache Lösung ist
list(np.where(df['b'].isnull())[0])
quelle
Hier ist eine weitere einfachere Einstellung:
quelle
Ich habe nach allen Zeilenindizes mit NaN-Werten gesucht.
Meine Arbeitslösung:
quelle
Der Datenrahmen soll df heißen und die interessierende Spalte (dh die Spalte, in der wir versuchen, Nullen zu finden ) ist 'b' . Das folgende Snippet gibt dann den gewünschten Index von Null im Datenrahmen an:
quelle