2017-08-06 1 views
0

Ich habe 10 DataFrames mit der gleichen Anzahl von Zeilen und jeder mit ihren eigenen Satz von eindeutigen Spalten (nicht zwischen allen Datenrahmen geteilt). Ich möchte einfach die Datenrahmen in Reihe zusammenfügen, so dass der endgültige Datenrahmen alle Spalten enthält, die in allen Datenrahmen enthalten sind. Die erste Zeile des endgültigen Datenrahmens würde die erste Zeile der ersten, gefolgt von der ersten Zeile der zweiten usw. bis zum zehnten Datenblock enthalten. Ich habe pandas.concat ausprobiert (Datenrahmen, Achse = 1), aber es hat irgendwie NaN-Werte in meinen numerischen Daten erzeugt. Ich habe mich darum gekümmert, indem ich eine extrem langsame und hässliche Methode geschrieben habe, die die Zeilen um den Index erhöht und Zeile für Zeile den letzten Datenrahmen erstellt. Was ist der richtige Pandas Weg dies zu tun?Effizient verketten Pandas DataFrames in Reihe

+0

es ist, weil die Zeilenanzahl von Datenrahmen unterschiedlich sind. Kannst du mir die Form von DataFrames zeigen? – Wonjin

+0

Sie müssen alle Datenrahmen neu indiziert haben, um gleich zu sein, und rufen Sie dann 'pd.merge' oder' pd.concat' auf. –

+0

@Wonjin nein, wie ich schon sagte, sie haben alle die gleiche Anzahl von Zeilen. – YungGun

Antwort

1

Unter der Annahme, alle Datenrahmen sind in einer Liste df_list:

df0_index = df_list[0].index # get the first data frame's index 

for i in range(1, len(df_list)): 
    df_list[i] = df_list[i].set_index(df0_index) # reindex all the other dataframes 

df_out = pd.concat(df_list, axis=1) # concatenate 
+1

Ich wünschte, ich hätte dies vor 8 Stunden gewusst! Ich brauche Zeit, um Index's besser zu verstehen. Vielen Dank. – YungGun

+0

Hey, tut mir leid, ich habe es tatsächlich ausprobiert, und es funktioniert nicht. Ich erhalte immer noch unerklärlicherweise NaN-Werte. Es ist mir ziemlich peinlich, zu diesem Zeitpunkt denke ich, dass das Problem bei Pandas liegt und nicht bei meinem Code. – YungGun

+0

@YungGun es ist bedauerlich Sie nicht akzeptiert ... wenn das Problem mit Pandas ist. Jedenfalls werde ich versuchen, ein Beispiel zu schaffen. –

1

habe es funktioniert. Einfach musste "ignore_index" auf True setzen, wenn pandas.concat() aufgerufen wird.

pd.concat(df_list, axis=1, ignore_index=True) # returns dataframes correctly. 

Beachten Sie, dass das Neuindizieren aus irgendeinem Grund nicht funktioniert.

1

Sie können dies tun, mit Liste Verständnis:

pd.concat([df.reset_index(drop=True) for df in df_list], axis = 1) 
Verwandte Themen