Ich versuche, keine Werte in einem Pandas-Datenrahmen mit Nullen für nur eine Teilmenge von Spalten zu füllen.
Wenn ich es tue:
import pandas as pd
df = pd.DataFrame(data={'a':[1,2,3,None],'b':[4,5,None,6],'c':[None,None,7,8]})
print df
df.fillna(value=0, inplace=True)
print df
Die Ausgabe:
a b c
0 1.0 4.0 NaN
1 2.0 5.0 NaN
2 3.0 NaN 7.0
3 NaN 6.0 8.0
a b c
0 1.0 4.0 0.0
1 2.0 5.0 0.0
2 3.0 0.0 7.0
3 0.0 6.0 8.0
Es ersetzt jedes None
durch 0
's. Was ich tun möchte, ist, nur None
s in Spalten zu ersetzen a
und b
, aber nicht c
.
Was ist der beste Weg, dies zu tun?
df[['a', 'b']] = df[['a','b']].fillna(value=0)
wird noch funktioniereninplace
wird weiterhin an einer Kopie gearbeitet. Ich weiß nicht, ob das der Fall istfillna
oder nicht. Siehe diese Antwort von einem der Pandas-Kernentwickler.Sie können unter Verwendung von
dict
,fillna
mit anderem Wert für verschiedene SpaltNachdem Sie es zurück zugewiesen haben
quelle
fromkeys
wenn Sie wollen, +1df.fillna({'a':0,'b':0}, inplace=True)
Sie können vermeiden, eine Kopie des Objekts mit Wens Lösung zu erstellen, und inplace = True:
Welche Ausbeuten:
quelle
So können Sie alles in einer Zeile erledigen:
Aufschlüsselung:
df[['a', 'b']]
Wählt die Spalten aus, für die Sie NaN-Wertevalue=0
füllen möchten , weist sie an, NaNs mit Null zu füllen, undinplace=True
macht die Änderungen dauerhaft, ohne dass eine Kopie des Objekts erstellt werden muss.quelle
Wenn Sie die oberste Antwort verwenden, wird eine Warnung angezeigt, dass Änderungen an einer Kopie eines df-Slice vorgenommen werden. Angenommen, Sie haben andere Spalten, ist es besser, ein Wörterbuch zu übergeben:
df.fillna({'A': 'NA', 'B': 'NA'}, inplace=True)
quelle
Oder so etwas wie:
und wenn es mehr gibt:
quelle
Manchmal funktioniert diese Syntax nicht:
Verwenden Sie stattdessen Folgendes:
quelle