Was ist der schnellste / einfachste Weg, um Nano- und Inf / Inf-Werte aus einem Pandas-DataFrame zu löschen, ohne sie zurückzusetzen mode.use_inf_as_null
? Ich möchte in der Lage sein, die Argumente subset
und how
von zu verwenden dropna
, außer bei inf
Werten, die als fehlend gelten, wie:
df.dropna(subset=["col1", "col2"], how="all", with_inf=True)
Ist das möglich? Gibt es eine Möglichkeit zu sagen , dropna
enthalten inf
in ihrer Definition Werte fehlt?
inf
Werte gegen eine vordefinierteint
wie0
in einer bestimmten Spalte "austauschen" ?.replace(..., 0)
. Um nur auf Spalten zu tun, aktualisieren Sie diese Spalten, dhdf[cols] = df[cols].replace(..., 0)
replace
dies nicht an Ort und Stelle funktioniert, sodass eine neueDataFrame
zurückgegeben wirdMit Optionskontext ist dies ohne permanente Einstellung möglich
use_inf_as_na
. Beispielsweise:Natürlich kann es zu behandeln eingestellt wird
inf
alsNaN
dauerhaft mitFür ältere Versionen ersetzen
use_inf_as_na
mituse_inf_as_null
.quelle
use_inf_as_null
waren veraltet und werden in einer zukünftigen Version entfernt. Verwenden Sieuse_inf_as_na
stattdessen. Antwort hinzufügen / aktualisieren?inf
auf globaler Einstellungsebene als auf operativer Ebene als Nullen zu behandeln . Dies könnte möglicherweise Zeit sparen, wenn die Werte zuerst eingegeben werden.Hier ist eine andere Methode, mit
.loc
der inf in einer Serie durch nan ersetzt wird:Als Antwort auf die ursprüngliche Frage:
quelle
Verwendung (schnell und einfach):
Diese Antwort basiert auf der Antwort von DougR in einer anderen Frage. Hier ein Beispielcode:
Ergebnis:
quelle
Eine weitere Lösung wäre die Verwendung der
isin
Methode. Verwenden Sie diese Option, um festzustellen, ob jeder Wert unendlich ist oder fehlt, und verketten Sie dann dieall
Methode, um festzustellen, ob alle Werte in den Zeilen unendlich sind oder fehlen.Verwenden Sie schließlich die Negation dieses Ergebnisses, um die Zeilen auszuwählen, die nicht alle unendlichen oder fehlenden Werte über die boolesche Indizierung haben.
quelle
Die obige Lösung ändert die
inf
s, die sich nicht in den Zielspalten befinden. Um dem abzuhelfen,quelle
{v: lst for v in cols}
Sie können
pd.DataFrame.mask
mit verwendennp.isinf
. Sie sollten zuerst sicherstellen, dass Ihre Datenrahmenserien alle vom Typ sindfloat
. Verwenden Sie danndropna
mit Ihrer vorhandenen Logik.quelle