Antworten:
Wenn ich richtig verstehe, sollte die Aufgabe Folgendes füllen:
>>> 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
dfleer ist, können Sie verwenden df['new'] = pd.Series() (siehe meine Antwort unten)
Um die Antwort von DSM zu ergänzen und auf dieser zugehörigen Frage aufzubauen, würde ich den Ansatz in zwei Fälle aufteilen:
Hinzufügen einer einzelnen Spalte: Weisen Sie den neuen Spalten einfach leere Werte zu, z df['C'] = np.nan
Hinzufügen mehrerer Spalten: Ich würde vorschlagen, die .reindex(columns=[...]) Pandas-Methode zu verwenden, um die neuen Spalten zum Spaltenindex des Datenrahmens hinzuzufügen. Dies funktioniert auch zum Hinzufügen mehrerer neuer Zeilen mit .reindex(rows=[...]). Beachten Sie, dass neuere Versionen von Pandas (v> 0,20) können Sie ein angeben , axiseher Stichwort als explizit zuweisen columnsoder rows.
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) Datenrahmen mit dem vorhandenen Datenrahmen verknüpfen, aber das fühlt sich für mich nicht pythonisch an :)
version >= 0.20.0das Löschen des DataFrame und das Hinzufügen der neuen Spalten als Zeilen. Beispiel für version < 0.20.0funktioniert gut auf Pandas Version0.24.1
, axis=1in version = 0.25. Ich habe versucht, Ihre Antwort so zu ändern, dass sie die aktualisierte Version enthält, wurde jedoch von @kenlukas und @il_raffa abgelehnt. Ich hoffe, dass jeder, der Schwierigkeiten hat zu verstehen, warum Ihre Antwort für ihn nicht funktioniert - so wie ich - zumindest auf diesen Kommentar stößt.
Eine noch einfachere Lösung ist:
df = df.reindex(columns = header_list)
Dabei ist "header_list" eine Liste der Header, die angezeigt werden sollen.
Alle in der Liste enthaltenen Header, die noch nicht im Datenrahmen enthalten sind, werden mit leeren Zellen unten hinzugefügt.
also wenn
header_list = ['a','b','c', 'd']
dann werden c und d als Spalten mit leeren Zellen hinzugefügt
Beginnend mit v0.16.0, DF.assign()könnte verwendet werden , um neue Spalten (zuweisen single / multiple ) zu ein DF. Diese Spalten werden am Ende der Liste in alphabetischer Reihenfolge eingefügt DF.
Dies ist im Vergleich zur einfachen Zuweisung in Fällen vorteilhaft, in denen Sie eine Reihe verketteter Operationen direkt am zurückgegebenen Datenrahmen ausführen möchten.
Betrachten Sie dasselbe DFBeispiel, 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 Original entsprechend DFzu ändern, verwenden Sie es wie df = df.assign(...)folgt : Da es den inplaceBetrieb derzeit nicht unterstützt .
Wenn Sie einen Spaltennamen aus einer Liste hinzufügen möchten
df=pd.DataFrame()
a=['col1','col2','col3','col4']
for i in a:
df[i]=np.nan
Die Antwort von @ emunsing ist wirklich cool, um mehrere Spalten hinzuzufügen, aber ich konnte sie in Python 2.7 nicht zum Laufen bringen. Stattdessen fand ich, dass dies funktioniert:
mydf = mydf.reindex(columns = np.append( mydf.columns.values, ['newcol1','newcol2'])
Der folgende Code behandelt die Frage "Wie füge ich meinem vorhandenen Datenrahmen n leere Spalten hinzu?". Um Lösungen für ähnliche Probleme an einem Ort zu halten, füge ich sie hier hinzu.
Ansatz 1 (um 64 zusätzliche Spalten mit Spaltennamen von 1-64 zu erstellen)
m = list(range(1,65,1))
dd=pd.DataFrame(columns=m)
df.join(dd).replace(np.nan,'') #df is the dataframe that already exists
Ansatz 2 (um 64 zusätzliche Spalten mit Spaltennamen von 1-64 zu erstellen)
df.reindex(df.columns.tolist() + list(range(1,65,1)), axis=1).replace(np.nan,'')
Du kannst tun
df['column'] = None #This works. This will create a new column with None type
df.column = None #This will work only when the column is already present in the dataframe
Man kann df.insert(index_to_insert_at, column_header, init_value)eine neue Spalte an einem bestimmten Index einfügen.
cost_tbl.insert(1, "col_name", "")
Die obige Anweisung würde eine leere Spalte nach der ersten Spalte einfügen.
N/A?