Hinzufügen einer neuen Spalte zu einem bestehenden DataFrame in Python pandas
Ich habe den folgenden indizierten DataFrame mit benannten Spalten und Zeilen nicht-kontinuierlichen Zahlen:
a b c d
2 0.671399 0.101208 -0.181532 0.241273
3 0.446172 -0.243316 0.051767 1.577318
5 0.614758 0.075793 -0.451460 -0.012493
Ich möchte eine neue Spalte, "e", zum bestehenden Datenrahmen hinzufügen und nichts am Datenrahmen ändern (d.h. die neue Spalte hat immer die gleiche Länge wie der Datenrahmen).
0 -0.335485
1 -1.166658
2 -0.385571
dtype: float64
Ich habe verschiedene Versionen von join
, append
, merge
ausprobiert, aber ich habe nicht das gewünschte Ergebnis erhalten, sondern höchstens Fehler. Wie kann ich die Spalte "e" zum obigen Beispiel hinzufügen?
882
3
Verwenden Sie die ursprünglichen df1-Indizes, um die Reihen zu erstellen:
Edit 2015 Einige berichteten, dass sie mit diesem Code die Warnung "SettingWithCopyWarning" erhielten.
Allerdings läuft der Code immer noch perfekt mit der aktuellen Pandas-Version 0.16.1.
Die
SettingWithCopyWarning
soll über eine möglicherweise ungültige Zuweisung auf einer Kopie des Dataframe informieren. Sie sagt nicht notwendigerweise, dass man es falsch gemacht hat (sie kann falsch-positive Ergebnisse auslösen), aber seit 0.13.0 lässt sie einen wissen, dass es geeignetere Methoden für den gleichen Zweck gibt. Wenn Sie dann die Warnung erhalten, befolgen Sie einfach den Rat: Versuchen Sie stattdessen .loc[row_index,col_indexer] = value zu verwenden.In der Tat ist dies derzeit die effizientere Methode, wie in der Pandas-Dokumentation beschrieben
Edit 2017
Wie in den Kommentaren und von @Alexander angedeutet, könnte die beste Methode zum Hinzufügen der Werte einer Reihe als neue Spalte eines DataFrame derzeit die Verwendung von
assign
sein:Dies ist die einfache Art, eine neue Spalte hinzuzufügen:
df['e'] = e
Am effizientesten ist es, dies direkt über NumPy zu tun:
Beachten Sie, dass mein ursprünglicher (sehr alter) Vorschlag war,
map
zu verwenden (was viel langsamer ist):