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?
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?
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.
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 :)
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
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 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.