Ich habe einen Datenrahmen wie unten
itm Date Amount
67 420 2012-09-30 00:00:00 65211
68 421 2012-09-09 00:00:00 29424
69 421 2012-09-16 00:00:00 29877
70 421 2012-09-23 00:00:00 30990
71 421 2012-09-30 00:00:00 61303
72 485 2012-09-09 00:00:00 71781
73 485 2012-09-16 00:00:00 NaN
74 485 2012-09-23 00:00:00 11072
75 485 2012-09-30 00:00:00 113702
76 489 2012-09-09 00:00:00 64731
77 489 2012-09-16 00:00:00 NaN
Wenn ich versuche, eine Funktion auf die Spalte Betrag anzuwenden, wird der folgende Fehler angezeigt.
ValueError: cannot convert float NaN to integer
Ich habe versucht, eine Funktion mit .isnan aus dem Mathematikmodul anzuwenden. Ich habe das pandas .replace-Attribut ausprobiert. Ich habe das .sparse-Datenattribut aus pandas 0.9 ausprobiert. Ich habe auch versucht, ob NaN == NaN-Anweisung in einer Funktion. Ich habe mir auch diesen Artikel angesehen. Wie ersetze ich NA-Werte in einem R-Datenrahmen durch Nullen? beim Betrachten einiger anderer Artikel. Alle Methoden, die ich ausprobiert habe, haben nicht funktioniert oder erkennen NaN nicht. Alle Hinweise oder Lösungen wäre dankbar.
Antworten:
Ich glaube, das
DataFrame.fillna()
wird das für dich tun.Link zu Dokumenten für einen Datenrahmen und für eine Serie .
Beispiel:
Um die NaNs nur in eine Spalte zu füllen, wählen Sie nur diese Spalte aus. In diesem Fall verwende ich inplace = True, um den Inhalt von df tatsächlich zu ändern.
BEARBEITEN:
Um a zu vermeiden
SettingWithCopyWarning
, verwenden Sie die integrierte spaltenspezifische Funktionalität:quelle
df[1]
es sich eher um eine Ansicht als um eine Kopie des Original-DF handelt? Wenn es eine seltene Situation gibt, in der es sich um eine Kopie handelt, würde dies natürlich einen äußerst problematischen Fehler verursachen. Gibt es dazu eine klare Aussage in der Pandas-Dokumentation?Es kann nicht garantiert werden, dass das Schneiden eine Ansicht oder eine Kopie zurückgibt. Du kannst tun
quelle
Sie könnten verwenden
replace
ändernNaN
zu0
:quelle
NaN
? oder wird es auch den Wert ersetzen, woNA
oderNaN
wiedf.fillna(0)
? Ich suche nach einer Lösung, die den Wert nur dort ersetzt, wo er istNaN
und nichtNA
NaN
dh Werte ersetzen , wonp.isnan
wahr istIch wollte nur ein bisschen ein Update / einen Sonderfall bereitstellen, da es so aussieht, als ob die Leute immer noch hierher kommen. Wenn Sie einen Multi-Index oder einen Index-Slicer verwenden, reicht die Option inplace = True möglicherweise nicht aus, um das ausgewählte Slice zu aktualisieren. In einem 2x2-Level-Multi-Index ändert dies beispielsweise keine Werte (ab Pandas 0.15):
Das "Problem" besteht darin, dass die Verkettung die Fillna-Fähigkeit zum Aktualisieren des ursprünglichen Datenrahmens unterbricht. Ich habe "Problem" in Anführungszeichen gesetzt, weil es gute Gründe für die Entwurfsentscheidungen gibt, die in bestimmten Situationen dazu geführt haben, dass diese Ketten nicht interpretiert wurden. Dies ist auch ein komplexes Beispiel (obwohl ich wirklich darauf gestoßen bin), aber das Gleiche gilt möglicherweise für weniger Indexebenen, je nachdem, wie Sie schneiden.
Die Lösung lautet DataFrame.update:
Es ist eine Zeile, liest sich ziemlich gut (Art) und eliminiert unnötiges Durcheinander mit Zwischenvariablen oder Schleifen, während Sie Fillna auf jedes mehrstufige Slice anwenden können, das Sie mögen!
Wenn jemand Orte finden kann, an denen dies nicht funktioniert, posten Sie dies bitte in den Kommentaren. Ich habe damit herumgespielt und mir die Quelle angesehen, und es scheint zumindest meine Multi-Index-Slice-Probleme zu lösen.
quelle
Der folgende Code hat bei mir funktioniert.
quelle
Einfache Möglichkeit, die fehlenden Werte zu füllen: -
Füllen von Zeichenfolgenspalten: Wenn Zeichenfolgenspalten fehlende Werte und NaN-Werte aufweisen.
Füllen von numerischen Spalten: Wenn die numerischen Spalten fehlende Werte und NaN-Werte haben.
NaN mit Null füllen:
quelle
Sie können auch Wörterbücher verwenden, um NaN-Werte der spezifischen Spalten im DataFrame zu füllen, anstatt alle DF mit einem Wert zu füllen.
quelle
In Anbetracht der bestimmten Spalte
Amount
in der obigen Tabelle handelt es sich um einen ganzzahligen Typ. Folgendes wäre eine Lösung:In ähnlicher Weise können Sie es mit verschiedenen Datentypen wie füllen
float
,str
und so weiter.Insbesondere würde ich den Datentyp in Betracht ziehen, um verschiedene Werte derselben Spalte zu vergleichen.
quelle
Na-Werte in Pandas ersetzen
Wenn
inplace = False
der df (Datenrahmen) nicht aktualisiert wird, werden die geänderten Werte zurückgegeben.quelle
Wenn Sie es in einen Pandas-Datenrahmen konvertieren, können Sie dies auch mithilfe von erreichen
fillna
.Dies gibt Folgendes zurück:
quelle
In erster Linie stehen zwei Optionen zur Verfügung. im Falle der Imputation oder des Füllens fehlender Werte NaN / np.nan mit nur numerischen Ersetzungen (über Spalte (n) hinweg:
df['Amount'].fillna(value=None, method= ,axis=1,)
ist ausreichend:Aus der Dokumentation:
Wert: Skalar, Diktat, Serie oder DataFrame Wert zum Füllen von Löchern (z. B. 0), alternativ ein Diktat / Serie / DataFrame mit Werten, die angeben, welcher Wert für jeden Index (für eine Serie) oder Spalte (für einen DataFrame) verwendet werden soll. . (Werte, die nicht im Diktat / Serie / Datenrahmen enthalten sind, werden nicht gefüllt). Dieser Wert kann keine Liste sein.
Das heißt, "Strings" oder "Konstanten" dürfen nicht mehr unterstellt werden.
Verwenden Sie für speziellere Imputationen SimpleImputer () :
quelle
So ersetzen Sie Nan in verschiedenen Spalten auf unterschiedliche Weise:
quelle