Pandas wird beim Umgang mit verschiedenen Daten in Python verwendet, aber bisher wurde es bei der Suche nach einem bestimmten numerischen Wert normalerweise einzeln mit "for" oder "df.iterrows ()" verarbeitet. Wenn die Daten jedoch größer werden, sind sie langsamer.
Nach der Untersuchung, ob es einen guten Weg gibt, scheint es besser zu sein, df.ix []
als Maske (Filter?) Zu verwenden.
Angenommen, Sie haben einen Datenrahmen wie diesen:
print df
A B C D E
TIME
2001-01-08 06:00:00 -0.5925 -1.11 0.055023 -0.074103 0.129126
2001-01-08 06:05:00 -0.4213 NaN NaN NaN NaN
2001-01-08 06:10:00 -0.3613 -2.19 NaN NaN NaN
2001-01-08 06:15:00 -0.3613 NaN NaN NaN 0.224574
2001-01-08 06:20:00 -0.3613 NaN 0.129036 -0.000281 1.094003
2001-01-08 06:25:00 -0.8243 -0.65 0.137242 -0.022502 2.145931
Ich möchte die Spalte wissen, die NaN in Zeile B ist
print df.ix[df["B"].isnull()]
A B C D E
TIME
2001-01-08 06:05:00 -0.4213 NaN NaN NaN NaN
2001-01-08 06:15:00 -0.3613 NaN NaN NaN 0.224574
2001-01-08 06:20:00 -0.3613 NaN 0.129036 -0.000281 1.094003
Ich möchte die Spalten kennen, die in Zeile E nicht NaN sind
print df.ix[df["E"].isnull()==False]
A B C D E
TIME
2001-01-08 06:00:00 -0.5925 -1.11 0.055023 -0.074103 0.129126
2001-01-08 06:15:00 -0.3613 NaN NaN NaN 0.224574
2001-01-08 06:20:00 -0.3613 NaN 0.129036 -0.000281 1.094003
2001-01-08 06:25:00 -0.8243 -0.65 0.137242 -0.022502 2.145931
Suche getroffen, egal welche Zeile NaN ist
print df.ix[df.isnull().values.any()]
A B C D E
TIME
2001-01-08 06:05:00 -0.4213 NaN NaN NaN NaN
2001-01-08 06:10:00 -0.3613 -2.19 NaN NaN NaN
2001-01-08 06:15:00 -0.3613 NaN NaN NaN 0.224574
2001-01-08 06:20:00 -0.3613 NaN 0.129036 -0.000281 1.094003
Ich möchte nur die ersten drei Spalten, in denen Zeile C NaN ist
print df.ix[df["C"].isnull(), :3]
A B C D E
TIME
2001-01-08 06:05:00 -0.4213 NaN NaN NaN NaN
2001-01-08 06:10:00 -0.3613 -2.19 NaN NaN NaN
Ich möchte die Zeilen A und B einer Spalte, die NaN in Zeile D ist
print df.ix[df["D"].isnull(), ["A", "B"]]
A B
TIME
2001-01-08 06:05:00 -0.4213 NaN
2001-01-08 06:10:00 -0.3613 -2.19
2001-01-08 06:15:00 -0.3613 Nan
Bearbeiten Sie die Zahl in Zeile A der Spalte, die NaN in Zeile D ist (versuchen Sie, 1 zu subtrahieren).
df.ix[df["D"].isnull(), "A"] -= 1
print df["A"]
A
TIME
2001-01-08 06:00:00 -0.5925
2001-01-08 06:05:00 -1.4213
2001-01-08 06:10:00 -1.3613
2001-01-08 06:15:00 -1.3613
2001-01-08 06:20:00 -0.3613
2001-01-08 06:25:00 -0.8243
Bedingte Suche im obigen Zustand
print df["A"]
A
TIME
2001-01-08 06:00:00 -0.5925
2001-01-08 06:05:00 -1.4213
2001-01-08 06:10:00 -1.3613
2001-01-08 06:15:00 -1.3613
2001-01-08 06:20:00 -0.3613
2001-01-08 06:25:00 -0.8243
print df.ix[df["A"]<= -1]
A B C D E
TIME
2001-01-08 06:05:00 -1.4213 NaN NaN NaN NaN
2001-01-08 06:10:00 -1.3613 -2.19 NaN NaN NaN
2001-01-08 06:15:00 -1.3613 NaN NaN NaN 0.224574
In diesem Beispiel ist es klein, aber selbst bei großen Datenrahmen ist es ziemlich schnell.
Nachtrag
Df.apply (function, axis = 1)
scheint am besten zu sein, wenn Sie die numerischen Werte jeder Spalte mit komplizierten bedingten Ausdrücken bearbeiten möchten.