Ich habe dies DataFrame
und möchte nur die Datensätze, deren EPS
Spalte nicht ist NaN
:
>>> df
STK_ID EPS cash
STK_ID RPT_Date
601166 20111231 601166 NaN NaN
600036 20111231 600036 NaN 12
600016 20111231 600016 4.3 NaN
601009 20111231 601009 NaN NaN
601939 20111231 601939 2.5 NaN
000001 20111231 000001 NaN NaN
... dh so etwas wie df.drop(....)
diesen resultierenden Datenrahmen zu bekommen:
STK_ID EPS cash
STK_ID RPT_Date
600016 20111231 600016 4.3 NaN
601939 20111231 601939 2.5 NaN
Wie mache ich das?
df.dropna(subset = ['column1_name', 'column2_name', 'column3_name'])
Antworten:
Lassen Sie sich nicht fallen, sondern nehmen Sie die Zeilen, in denen EPS nicht NA ist:
quelle
pandas.notnull
anstelle vonnp.isfinite
EPS
im Beispiel) Zeichenfolgen oder andere Typen enthält, die nicht verdaut werden könnennp.isfinite()
. Ich empfehle,pandas.notnull()
dies großzügiger zu handhaben.Diese Frage ist bereits gelöst, aber ...
... berücksichtigen Sie auch die von Wouter in seinem ursprünglichen Kommentar vorgeschlagene Lösung . Die Fähigkeit, fehlende Daten einschließlich zu verarbeiten
dropna()
, ist explizit in Pandas integriert. Abgesehen von einer potenziell verbesserten Leistung gegenüber der manuellen Ausführung bieten diese Funktionen auch eine Vielzahl von Optionen, die nützlich sein können.Es gibt auch andere Optionen (siehe Dokumente unter http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html ), einschließlich des Löschens von Spalten anstelle von Zeilen.
Ziemlich praktisch!
quelle
df.dropna(subset = ['column_name'])
. Ich hoffe, das spart mindestens einer Person die zusätzlichen 5 Sekunden von "Was mache ich falsch?". Tolle Antwort, +1df.dropna(subset = ['column_name'])
ist genau das, wonach ich gesucht habe! Vielen Dank!Ich weiß, dass dies bereits beantwortet wurde, aber nur um eine rein pandasische Lösung für diese spezielle Frage zu finden, im Gegensatz zu der allgemeinen Beschreibung von Aman (die wunderbar war) und für den Fall, dass jemand anderes dies tut:
quelle
df.dropna(subset=['EPS'])
(basierend auf der allgemeinen Beschreibung von Aman funktioniert das natürlich auch)notnull
ist auch das, was Wes (Autor von Pandas) in seinem Kommentar zu einer anderen Antwort vorgeschlagen hat.df[pd.notnull(df[df.columns[INDEX]])]
woINDEX
die nummerierte Spalte wäre, wenn Sie den Namen nicht kennenSie können dies verwenden:
quelle
how='all'
redundanten hier ist, weil Sie Datenrahmen nur mit einem Feld so beide subsetting'all'
und'any'
haben die gleiche Wirkung.Einfachste aller Lösungen:
quelle
Sie können die Datenrahmenmethode notnull oder invers von isnull oder numpy.isnan verwenden :
quelle
Einfach und leicht
df.dropna(subset=['EPS'],inplace=True)
Quelle: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html
quelle
inplace=True
ist ein bizarres Thema und hat keinen Einfluss aufDataFrame.dropna()
. Siehe: github.com/pandas-dev/pandas/issues/16529noch eine andere Lösung, die die Tatsache nutzt, dass
np.nan != np.nan
:quelle
Andere Version:
quelle
Series.notna()
?In Datensätzen mit einer großen Anzahl von Spalten ist es noch besser zu sehen, wie viele Spalten Nullwerte enthalten und wie viele nicht.
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:
Hinweis: Der obige Code entfernt alle Ihre Nullwerte. Wenn Sie Nullwerte möchten, verarbeiten Sie diese zuvor.
quelle
Es kann hinzugefügt werden, dass '&' verwendet werden kann, um zusätzliche Bedingungen hinzuzufügen, z
Beachten Sie, dass Pandas bei der Bewertung der Aussagen Klammern benötigen.
quelle
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
. Sie müssen Klammern hinzufügen -df = df[(df.EPS > 2.0) & (df.EPS <4.0)]
aber es ist auch keine Antwort auf diese Frage.Aus irgendeinem Grund hat keine der zuvor eingereichten Antworten für mich funktioniert. Diese grundlegende Lösung hat:
Dabei werden natürlich auch Zeilen mit negativen Zahlen gelöscht. Wenn Sie diese möchten, ist es wahrscheinlich klug, dies auch nachträglich hinzuzufügen.
quelle
Eine der Lösungen kann sein
Ein anderer Weg kann sein
Ich hoffe diese sind nützlich.
quelle