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
Antwort
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
Ich wünschte, ich hätte dies vor 8 Stunden gewusst! Ich brauche Zeit, um Index's besser zu verstehen. Vielen Dank. – YungGun
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
@YungGun es ist bedauerlich Sie nicht akzeptiert ... wenn das Problem mit Pandas ist. Jedenfalls werde ich versuchen, ein Beispiel zu schaffen. –
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.
Sie können dies tun, mit Liste Verständnis:
pd.concat([df.reset_index(drop=True) for df in df_list], axis = 1)
- 1. Pandas Dataframes: wie man sie effizient erstellt
- 2. Anwenden einer Funktion auf zwei Pandas DataFrames effizient
- 3. Verketten Sie zwei Pandas DataFrames, ohne Zeilen-IDs zu duplizieren?
- 4. Verketten von MultiIndex DataFrames mit Spaltenüberschriften
- 5. Typ-Überprüfung Pandas DataFrames
- 6. Pandas Dataframes append
- 7. Python Pandas verketten eine Reihe von Zeichenfolgen in eine Zeichenfolge
- 8. Summe der Pandas DataFrames
- 9. Sortieren Pandas DataFrames
- 10. Pandas vs Numpy Dataframes
- 11. effizient verschmelzen mehrere Datenrahmen in Pandas
- 12. Merge DataFrames in Pandas mit dem Mittelwert
- 13. Verketten Werte in eine Reihe
- 14. Verketten Spalten in Pandas
- 15. Kann Pandabas Dataframes nicht mit der gleichen Länge verketten?
- 16. Bedingte Zusammenführung von anderen mehreren Pandas DataFrames
- 17. Finde den nächsten Punkt in Pandas DataFrames
- 18. Pandas verschmelzen 2 DataFrames in ein Diagramm
- 19. Export Liste der Pandas Dataframes in Python
- 20. Umgang mit Nullen in Pandas DataFrames Spaltenunterteilungen in Python
- 21. Verketten einer Reihe von Promises
- 22. Schließen Pandas Speicher effizient?
- 23. Verketten Pandas Dataframe
- 24. Das Verketten von zwei Pandas DataFrames mit der gleichen Länge verlängert die Länge des resultierenden Datenrahmens
- 25. Pandas: verketten einige df
- 26. Box Plot eines vielen Pandas Dataframes
- 27. pandas MemoryError beim Lesen eines großen Dataframes
- 28. Wörterbuch der Pandas zu Dataframes Multiindex Dataframe
- 29. Pandas Erstellen von Dataframes von Loops
- 30. Wie kann man große Datenrahmen in Pandas effizient verbinden/zusammenführen/verketten?
es ist, weil die Zeilenanzahl von Datenrahmen unterschiedlich sind. Kannst du mir die Form von DataFrames zeigen? – Wonjin
Sie müssen alle Datenrahmen neu indiziert haben, um gleich zu sein, und rufen Sie dann 'pd.merge' oder' pd.concat' auf. –
@Wonjin nein, wie ich schon sagte, sie haben alle die gleiche Anzahl von Zeilen. – YungGun