Erstellen Sie einen leeren Datenrahmen mit Index aus einem anderen Datenrahmen

74

Ich habe einen Datenrahmen df1 mit mehreren Spalten und Zeilen. Einfaches Beispiel:

    TIME T1  T2 
       1 10 100
       2 20 200
       3 30 300

Ich möchte einen leeren Datenrahmen df2 erstellen und später neue Spalten mit den Berechnungsergebnissen hinzufügen.

Für diesen Moment sieht mein Code folgendermaßen aus:

     df1=pd.read_csv("1.txt",index_col="TIME")

     df2=df1.copy()[[]] #copy df1 and erase all columns

... zwei neue Spalten hinzufügen:

     df2["results1"],df2["results2"]=df1["T1"]*df["T2"]*3,df1["T2"]+100

Gibt es einen besseren / sichereren / schnelleren Weg, dies zu tun? Ist es möglich, einen leeren Datenrahmen df2 zu erstellen und nur den Index von df1 zu kopieren?

Michal
quelle
Ich mag Ihren ursprünglichen Vorschlag, außer dass Sie nicht den gesamten Datenrahmen kopieren und löschen müssen: df2 = df1 [[]]. Copy () #leer Slice, dann kopieren
Elias Hasle

Antworten:

116
df2 = pd.DataFrame(index=df1.index)

Dadurch wird ein DataFrame ohne Spalten, sondern nur mit einem Index erstellt, und es handelt sich um denselben Index wie in df1.

Viktor Kerkez
quelle
3
Es ist besser, den Index als df1.index.copy () festzulegen. Andernfalls teilen sich df1 und df2 dasselbe
Indexobjekt
7
Indizes sind genau aus diesem Grund unveränderlich.
Viktor Kerkez
3
Während Sie df2.index.name = 'test' setzen, erhält der Index von df1 auch den Namen.
Warten kuo
2
Der Fehler wird in der nächsten Version behoben , daher ist es besser, df1.index.copy () vor der Veröffentlichung von
0.13 zu verwenden
9

Es ist besser, den Index als df1.index.copy () festzulegen.

df2 = pd.DataFrame(index=df1.index.copy())

Sie können verwenden df1.indexist df2.indexzu prüfen , ob sie das gleiche Objekt sind

Wartenkuo
quelle
11
Es ist nicht so, Sie machen nur eine unnötige Kopie eines Index. Indizes sind genau aus diesem Grund unveränderlich - um sie zwischen verschiedenen Datenstrukturen teilen zu können, ohne befürchten zu müssen, dass sie sich ändern.
Viktor Kerkez
4

Sie können den Index eines Datenrahmens auch direkt einem anderen Datenrahmen zuweisen.

df2.index=df1.index

Anand Mohan
quelle
1

Sie können diesen Funktionscode verwenden:

df2=df1[[]].copy()

Paulo Pinto
quelle
0

NaNFügen Sie den Index hinzu, um zu vermeiden, dass alle nach dem Concat angezeigt werden.

df1 = pd.DataFrame(x1.toarray(),index=simpledf.index, columns=v.get_feature_names())

Verwenden Sie beim Definieren des neuen Datenrahmens mit Xtransformierten den gleichen Index wie den ursprünglichen Datenrahmen.

RPeneluppi
quelle