520 Stimmen

Wie fügt man eine leere Spalte zu einem Datenrahmen hinzu?

Was ist der einfachste Weg, eine leere Spalte zu einem Pandas DataFrame-Objekt hinzuzufügen? Das beste, was ich gefunden habe, ist so etwas wie

df['foo'] = df.apply(lambda _: '', axis=1)

Gibt es eine weniger abwegige Methode?

764voto

DSM Punkte 317386

Wenn ich es richtig verstehe, sollte die Zuweisung folgendes ergeben:

>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
>>> df
   A  B
0  1  2
1  2  3
2  3  4
>>> df["C"] = ""
>>> df["D"] = np.nan
>>> df
   A  B C   D
0  1  2   NaN
1  2  3   NaN
2  3  4   NaN

92voto

Carsten Punkte 2705

Ich mag:

df['new'] = pd.Series(dtype='int')

# oder verwenden Sie andere dtypes wie 'float', 'object', ...

Wenn Sie ein leeres DataFrame haben, stellt diese Lösung sicher, dass keine neue Zeile hinzugefügt wird, die nur NaN enthält.

Das angeben von dtype ist nicht unbedingt erforderlich, neuere Pandas-Versionen geben jedoch eine DeprecationWarning aus, wenn es nicht angegeben ist.

82voto

emunsing Punkte 9188

Um zu DSMs Antwort hinzuzufügen und auf diese zugehörige Frage aufzubauen, würde ich den Ansatz in zwei Fälle aufteilen:

  • Hinzufügen einer einzelnen Spalte: Weisen Sie einfach leere Werte den neuen Spalten zu, z.B. df['C'] = np.nan

  • Hinzufügen mehrerer Spalten: Ich würde vorschlagen, die .reindex(columns=[...]) Methode von pandas zu verwenden, um die neuen Spalten zum Spaltenindex des Datenrahmens hinzuzufügen. Dies funktioniert auch beim Hinzufügen mehrerer neuer Zeilen mit .reindex(rows=[...]). Beachten Sie, dass neuere Versionen von Pandas (v>0.20) Ihnen erlauben, ein axis Schlüsselwort anzugeben, anstelle explizit auf columns oder rows zuzuweisen.

Hier ist ein Beispiel zum Hinzufügen mehrerer Spalten:

mydf = mydf.reindex(columns = mydf.columns.tolist() + ['newcol1','newcol2'])

oder

mydf = mydf.reindex(mydf.columns.tolist() + ['newcol1','newcol2'], axis=1)  # Version > 0.20.0

Sie können auch immer einen neuen (leeren) DataFrame an den vorhandenen DataFrame anhängen, aber das fühlt sich für mich nicht so pythonisch an :)

66voto

liana Punkte 631

Eine noch einfachere Lösung ist:

df = df.reindex(columns = header_list)                

wo "header_list" eine Liste der Überschriften ist, die angezeigt werden sollen.

Jede Überschrift, die in der Liste enthalten ist und noch nicht im DataFrame gefunden wurde, wird mit leeren Zellen darunter hinzugefügt.

Also, wenn

header_list = ['a','b','c', 'd']

dann werden c und d als Spalten mit leeren Zellen hinzugefügt

46voto

Nickil Maveli Punkte 27092

Anfangend mit v0.16.0 konnte DF.assign() verwendet werden, um neue Spalten (Einzelne/Mehrere) einem DF zuzuweisen. Diese Spalten werden in alphabetischer Reihenfolge am Ende des DF eingefügt.

Dies wird vorteilhaft im Vergleich zur einfachen Zuweisung in Fällen, in denen Sie eine Reihe von verketteten Operationen direkt auf dem zurückgegebenen DataFrame ausführen möchten.

Betrachten Sie das gleiche DF-Beispiel, das von @DSM demonstriert wurde:

df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
df
Out[18]:
   A  B
0  1  2
1  2  3
2  3  4

df.assign(C="",D=np.nan)
Out[21]:
   A  B C   D
0  1  2   NaN
1  2  3   NaN
2  3  4   NaN

Beachten Sie, dass dies eine Kopie mit allen vorherigen Spalten zusammen mit den neu erstellten zurückgibt. Um das ursprüngliche DF entsprechend zu ändern, verwenden Sie es wie folgt: df = df.assign(...), da es derzeit nicht den inplace-Befehl unterstützt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X