HOWTO · Pandas

Wie man zwei DataFrames in Pandas Python verkettet

Mit Hilfe von Pandas ist es möglich, Series oder DataFrames schnell mit verschiedenen Arten von Mengenlogik für die Indizes und Fähigkeiten der relationalen Algebra für Join- und Merge-ähnliche Operationen zu kombinieren.

Auf dieser Seite

Kombinieren Sie zwei Pandas-DataFrame-Objekte mit pd.concat([df1, df2]). Standardmäßig stapelt dies ihre Zeilen und behält ihre ursprünglichen Indexbeschriftungen bei. Verwenden Sie axis=1, um Spalten nebeneinander zu platzieren, wobei Pandas die Zeilen nach Index ausrichtet. Wenn Zeilen über eine gemeinsame Spalte wie id übereinstimmen sollen, verwenden Sie DataFrame.merge() mit dieser Spalte als Schlüssel.

Die folgenden Beispiele verwenden kleine, explizite Eingaben, damit Sie die Operation an Ihre eigenen Spalten und Ihren eigenen Index anpassen können. Jede Ausgabe zeigt das Ergebnis für ihr entsprechendes Beispiel.

Zwei DataFrames in Pandas Python verketten

Ein Pandas-DataFrame ist eine beschriftete Tabelle mit Spalten, die unterschiedliche Arten von Werten enthalten können. Wenn zwei Tabellen dieselbe Art von Datensätzen enthalten, ist die Verkettung über Zeilen ein direkter Weg, sie zu kombinieren. Übergeben Sie die DataFrames in der gewünschten Reihenfolge als Liste an pd.concat():

import pandas as pd

df1 = pd.DataFrame({"id": [1, 2], "name": ["Ada", "Lin"]})
df2 = pd.DataFrame({"id": [3, 4], "name": ["Sam", "Mina"]})

combined = pd.concat([df1, df2])
print(combined)
   id  name
0   1   Ada
1   2   Lin
0   3   Sam
1   4  Mina

Standardmäßig gilt axis=0, sodass die Zeilen von df2 auf die Zeilen von df1 folgen. Die ursprünglichen Indexbeschriftungen bleiben erhalten; da beide Eingaben bei Index 0 beginnen, hat das kombinierte Ergebnis wiederholte Indexbeschriftungen. Wenn ein frischer, fortlaufender Index nützlicher ist, übergeben Sie ignore_index=True: pd.concat([df1, df2], ignore_index=True). Dies ändert den Index des Ergebnisses, während Werte und Zeilenreihenfolge unverändert bleiben.

concat() verwenden, um DataFrames entlang von Zeilen oder Spalten zu verketten

Das Argument axis wählt die Richtung der Verkettung. axis=0 fügt Zeilen hinzu und ist die Standardeinstellung. axis=1 fügt Spalten hinzu und richtet jede Eingabe an ihren Indexbeschriftungen aus. Beispielsweise erscheinen Zeilen mit demselben Index zusammen; Zeilen ohne übereinstimmende Beschriftung werden dennoch dargestellt, mit einem fehlenden Wert in den Spalten des anderen DataFrames.

import pandas as pd

names = pd.DataFrame({"name": ["Ada", "Lin"]}, index=[10, 20])
scores = pd.DataFrame({"score": [91, 84]}, index=[10, 20])

side_by_side = pd.concat([names, scores], axis=1)
print(side_by_side)
   name  score
10  Ada     91
20  Lin     84

Wählen Sie die Achse nach der Form des benötigten Ergebnisses: Das Stapeln von Datensätzen nutzt Zeilen, das Hinzufügen von Feldern nutzt Spalten. Das Argument join von concat() beschreibt, wie Beschriftungen auf der anderen Achse ausgerichtet werden. Es vergleicht keine Werte in einer Spalte wie id; verwenden Sie dafür einen schlüsselbasierten Merge im nächsten Abschnitt.

DataFrames nach Index ausrichten oder über einen gemeinsamen Schlüssel verbinden

Die nebeneinander erfolgende Verkettung gleicht Indexbeschriftungen ab, nicht gleiche Werte in einer Datenspalte. join="outer" ist die Standardausrichtung für die andere Achse und behält Beschriftungen, die in einer der Eingaben vorkommen, wobei nicht übereinstimmende Zellen mit fehlenden Werten gefüllt werden. join="inner" behält nur Beschriftungen, die in beiden Eingaben vorhanden sind. Eine innere Ausrichtung kann Zeilen verwerfen, wählen Sie sie daher nur, wenn das Ergebnis absichtlich auf gemeinsame Beschriftungen beschränkt werden soll.

import pandas as pd

left = pd.DataFrame({"name": ["Ada", "Lin"]}, index=[1, 2])
right = pd.DataFrame({"score": [91, 84]}, index=[2, 3])

outer = pd.concat([left, right], axis=1, join="outer")
inner = pd.concat([left, right], axis=1, join="inner")
print("outer rows:", len(outer), "inner rows:", len(inner))
outer rows: 3 inner rows: 1

Um Datensätze über ein gemeinsames Feld abzugleichen, verwenden Sie merge() und benennen Sie den Schlüssel mit on. Diese Operation gleicht gleiche Schlüsselwerte ab, selbst wenn die beiden Tabellen unterschiedliche Zeilenindizes verwenden. Das folgende Beispiel behält nur IDs, die in beiden Eingaben vorhanden sind; verwenden Sie how="left", "right" oder "outer", wenn Sie eine andere Menge von Schlüsseln benötigen.

import pandas as pd

people = pd.DataFrame({"id": [1, 2], "name": ["Ada", "Lin"]})
results = pd.DataFrame({"id": [2, 3], "score": [84, 91]})

matched = people.merge(results, on="id", how="inner")
print(matched)
   id name  score
0   2  Lin     84

Das veraltete append() durch concat() ersetzen

Ältere Beispiele verwenden möglicherweise die Methode append(), um die Zeilen eines DataFrames zu einem anderen hinzuzufügen. Schreiben Sie die Operation für diese Aufgabe mit concat() und übergeben Sie beide DataFrames in Reihenfolge. Dies macht die zeilenweise Kombination explizit und folgt dem gleichen Muster wie das Hauptbeispiel:

import pandas as pd

first = pd.DataFrame({"item": ["pen", "book"]})
second = pd.DataFrame({"item": ["lamp"]})

combined = pd.concat([first, second], ignore_index=True)
print(combined)
   item
0   pen
1  book
2  lamp

Die Option ignore_index=True ist nützlich, wenn die Indexbeschriftungen der Quelle in der kombinierten Tabelle nicht aussagekräftig sind. Lassen Sie sie weg, wenn diese Beschriftungen Informationen enthalten, die Sie bewahren müssen. Es sind keine versionsspezifischen Ausführungsnachweise verfügbar, sodass dieser Abschnitt keine Aussage darüber trifft, welche Pandas-Versionen append() bereitstellen.