Möchten Sie tatsächlich eine Spalte mit leeren Zeichenfolgen oder besser gesagt N/A?
Film oder
Antworten:
418
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
012123234>>> df["C"]="">>> df["D"]= np.nan
>>> df
A B C D
012NaN123NaN234NaN
Diese Antwort hat gerade neue Zeilen für mich erstellt.
Logicbloke
@logicbloke können Sie ein Beispiel geben, wo dies geschieht?
Craymichael
@craymichael Es ist eine Weile her, aber ich glaube, ich hatte nummerierte Spalten ohne Namen und benannte Zeilen und es wurde am Ende nur eine neue Zeile erstellt.
Logicbloke
1
Wenn das dfleer ist, können Sie verwenden df['new'] = pd.Series() (siehe meine Antwort unten)
Carsten
Wie füge ich mehrere leere Spalten hinzu?
M. Mariscal
46
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:
Beispiel für 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
Lalo
@emunsing Bei der Suche nach einer Antwort auf diese Frage fand ich Ihre Antwort letztendlich hilfreich. Zunächst aber war es nicht für mich arbeiten , wie Pandas erfordert , 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.
Griff
@Griff - Ich habe meine Antwort jetzt aktualisiert, um Probleme mit der Versionskompatibilität genauer und expliziter zu behandeln. Vielen Dank, dass Sie dies hervorgehoben haben.
Emunsing
35
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
Genauer gesagt werden die Spalten mit NaNs hinzugefügt.
Broccoli2000
18
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
012123234
df.assign(C="",D=np.nan)Out[21]:
A B C D
012NaN123NaN234NaN
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 .
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:
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['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
N/A
?Antworten:
Wenn ich richtig verstehe, sollte die Aufgabe Folgendes füllen:
quelle
df
leer ist, können Sie verwendendf['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 zuweisencolumns
oderrows
.Hier ist ein Beispiel zum Hinzufügen mehrerer Spalten:
oder
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 :)
quelle
version >= 0.20.0
das Löschen des DataFrame und das Hinzufügen der neuen Spalten als Zeilen. Beispiel fürversion < 0.20.0
funktioniert gut auf Pandas Version0.24.1
, axis=1
inversion = 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:
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
dann werden c und d als Spalten mit leeren Zellen hinzugefügt
quelle
Beginnend mit
v0.16.0
,DF.assign()
könnte verwendet werden , um neue Spalten (zuweisen single / multiple ) zu einDF
. Diese Spalten werden am Ende der Liste in alphabetischer Reihenfolge eingefügtDF
.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: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 wiedf = df.assign(...)
folgt : Da es deninplace
Betrieb derzeit nicht unterstützt .quelle
Ich mag:
Wenn Sie einen leeren Datenrahmen haben, stellt diese Lösung sicher, dass keine neue Zeile
NaN
hinzugefügt wird, die nur enthält .Wenn
dtype
nicht angegeben, erzeugen neuere Pandas-Versionen aDeprecationWarning
.quelle
Wenn Sie einen Spaltennamen aus einer Liste hinzufügen möchten
quelle
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:
quelle
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)
Ansatz 2 (um 64 zusätzliche Spalten mit Spaltennamen von 1-64 zu erstellen)
quelle
Du kannst tun
quelle
Man kann
df.insert(index_to_insert_at, column_header, init_value)
eine neue Spalte an einem bestimmten Index einfügen.Die obige Anweisung würde eine leere Spalte nach der ersten Spalte einfügen.
quelle