Ich versuche, die Werte in einer Spalte eines Datenrahmens zu ersetzen. Die Spalte ('weiblich') enthält nur die Werte 'weiblich' und 'männlich'.
Ich habe folgendes versucht:
w['female']['female']='1'
w['female']['male']='0'
Erhalten Sie jedoch genau die gleiche Kopie der vorherigen Ergebnisse.
Idealerweise möchte ich eine Ausgabe erhalten, die der folgenden Schleife elementweise ähnelt.
if w['female'] =='female':
w['female'] = '1';
else:
w['female'] = '0';
Ich habe die Gotchas-Dokumentation ( http://pandas.pydata.org/pandas-docs/stable/gotchas.html ) durchgesehen , kann aber nicht herausfinden, warum nichts passiert.
Jede Hilfe wird geschätzt.
.loc
Syntax zu verwenden, um Folgendes zu vermeidenSettingWithCopyWarning
: pandas.pydata.org/pandas-docs/stable/…Sie können eine Teilmenge eines Datenrahmens mit loc bearbeiten:
In diesem Fall:
quelle
Siehe pandas.DataFrame.replace () -Dokumente .
quelle
Leichte Variation:
quelle
Dies sollte auch funktionieren:
quelle
Sie können auch
apply
mit.get
dh verwendenw['female'] = w['female'].apply({'male':0, 'female':1}.get)
::Datenrahmen
w
:Verwenden
apply
zum Ersetzen von Werten aus dem Wörterbuch:Ergebnis:
Hinweis:
apply
Mit Wörterbuch sollte verwendet werden, wenn alle möglichen Werte der Spalten im Datenrahmen im Wörterbuch definiert sind. Andernfalls ist es leer für diejenigen, die nicht im Wörterbuch definiert sind.quelle
Das ist sehr kompakt:
Ein weiterer guter:
quelle
Alternativ gibt es die integrierte Funktion pd.get_dummies für diese Art von Zuweisungen:
Dies gibt Ihnen einen Datenrahmen mit zwei Spalten, eine für jeden Wert, der in w ['weiblich'] vorkommt, von dem Sie den ersten löschen (weil Sie ihn aus der verbleibenden ableiten können). Die neue Spalte wird automatisch als die Zeichenfolge benannt, die Sie ersetzt haben.
Dies ist besonders nützlich, wenn Sie kategoriale Variablen mit mehr als zwei möglichen Werten haben. Diese Funktion erstellt so viele Dummy-Variablen, wie zur Unterscheidung aller Fälle erforderlich sind. Achten Sie dann darauf, dass Sie nicht den gesamten Datenrahmen einer einzelnen Spalte zuweisen, sondern, wenn w ['weiblich'] 'männlich', 'weiblich' oder 'neutral' sein könnte, Folgendes tun:
Dann bleiben Ihnen zwei neue Spalten, die Ihnen die Dummy-Codierung von 'weiblich' geben, und Sie haben die Spalte mit den Zeichenfolgen entfernt.
quelle
Verwenden
Series.map
mitSeries.fillna
Wenn Ihre Spalte mehr Zeichenfolgen als nur
female
und enthältmale
,Series.map
schlägt dies in diesem Fall fehl, daNaN
andere Werte zurückgegeben werden.Deshalb müssen wir es verketten mit
fillna
:Beispiel, warum
.map
fehlschlägt :Für die richtige Methode verketten wir
map
mitfillna
, also füllen wir dieNaN
mit Werten aus der ursprünglichen Spalte:quelle
Es gibt auch eine
pandas
aufgerufene Funktion, mitfactorize
der Sie diese Art von Arbeit automatisch ausführen können. Es konvertiert Beschriftungen in Zahlen :['male', 'female', 'male'] -> [0, 1, 0]
. Weitere Informationen finden Sie in dieser Antwort.quelle
Ich denke, als Antwort sollte darauf hingewiesen werden, welchen Objekttyp Sie in allen oben vorgeschlagenen Methoden erhalten: Ist es Serie oder DataFrame?
Wenn Sie eine Spalte von
w.female.
oder erhaltenw[[2]]
(wobei 2 die Nummer Ihrer Spalte ist), erhalten Sie DataFrame zurück. In diesem Fall können Sie also DataFrame-Methoden wie verwenden.replace
.Wenn Sie
.loc
oderiloc
Sie Series zurück und Serie hat keine.replace
Methode, so dass Sie Methoden wie verwenden solltenapply
,map
und so weiter.quelle