Gegeben ein DataFrame:
np.random.seed(0)
df = pd.DataFrame(np.random.randn(3, 3), columns=list('ABC'), index=[1, 2, 3])
df
A B C
1 1.764052 0.400157 0.978738
2 2.240893 1.867558 -0.977278
3 0.950088 -0.151357 -0.103219
Was ist der einfachste Weg, eine neue Spalte hinzuzufügen, die einen konstanten Wert enthält, z. B. 0?
A B C new
1 1.764052 0.400157 0.978738 0
2 2.240893 1.867558 -0.977278 0
3 0.950088 -0.151357 -0.103219 0
Dies ist meine Lösung, aber ich weiß nicht, warum dies NaN in die 'neue' Spalte bringt?
df['new'] = pd.Series([0 for x in range(len(df.index))])
A B C new
1 1.764052 0.400157 0.978738 0.0
2 2.240893 1.867558 -0.977278 0.0
3 0.950088 -0.151357 -0.103219 NaN
df['new'] = pd.Series([0 for x in range(len(df.index))], index=df.index)
.[0] * len(df.index)
df['new'] = 0
Antworten:
Der Grund, warum dies
NaN
in eine Spalte eingefügt wird, liegt darin, dassdf.index
und dieIndex
Ihres rechten Objekts unterschiedlich sind. @zach zeigt den richtigen Weg, um eine neue Spalte mit Nullen zuzuweisen. Im Allgemeinen wirdpandas
versucht, die Indizes so weit wie möglich auszurichten. Ein Nachteil ist, dass wenn Indizes nicht ausgerichtet sind, SieNaN
überall dort ankommen, wo sie nicht ausgerichtet sind. Spielen Sie mit den Methodenreindex
und herumalign
, um eine gewisse Intuition für die Ausrichtung zu erlangen. Arbeiten Sie mit Objekten, die teilweise, vollständig und nicht alle ausgerichteten Indizes haben. SoDataFrame.align()
funktioniert beispielsweise Folgendes mit teilweise ausgerichteten Indizes:quelle
Super einfache In-Place-Zuordnung:
df['new'] = 0
Führen Sie zur direkten Änderung eine direkte Zuordnung durch. Diese Aufgabe wird von Pandas für jede Zeile gesendet.
Hinweis für Objektspalten
Wenn Sie eine Spalte mit leeren Listen hinzufügen möchten, ist hier mein Rat:
object
Spalten sind schlechte Nachrichten in Bezug auf die Leistung. Überdenken Sie die Struktur Ihrer Daten.Wenn Sie eine Listenspalte speichern müssen, stellen Sie sicher, dass Sie dieselbe Referenz nicht mehrmals kopieren.
Kopie erstellen:
df.assign(new=0)
Wenn Sie stattdessen eine Kopie benötigen, verwenden Sie
DataFrame.assign
:Wenn Sie mehrere solcher Spalten mit demselben Wert zuweisen müssen, ist dies so einfach wie:
Zuordnung mehrerer Spalten
Wenn Sie mehrere Spalten mit unterschiedlichen Werten zuweisen müssen, können Sie diese
assign
mit einem Wörterbuch verwenden.quelle
Mit modernen Pandas können Sie einfach Folgendes tun:
quelle
Hier ist ein weiterer Liner mit Lambdas (Spalte mit konstantem Wert = 10 erstellen)
Vor
nach dem
quelle
df['newCol'] = 10
ist auch ein Einzeiler (und ist schneller). Was ist der Vorteil der Verwendung hier anwenden?df['new'] = [[] for _ in range(len(df))]