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
df
leer 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 , axis
eher Stichwort als explizit zuweisen columns
oder 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.0
das Löschen des DataFrame und das Hinzufügen der neuen Spalten als Zeilen. Beispiel für version < 0.20.0
funktioniert gut auf Pandas Version0.24.1
, axis=1
in 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 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 Original entsprechend DF
zu ändern, verwenden Sie es wie df = df.assign(...)
folgt : Da es den inplace
Betrieb 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
?