Pandas-DataFrames mit merge() effizient zusammenführen
Die Pandas-Funktion DataFrame.merge() dient dazu, zwei DataFrames anhand von gemeinsamen Schlüsseln (Keys) miteinander zu verbinden. Auf diese Weise lassen sich Daten verschiedener Quellen effizient kombinieren, um umfassendere Analysen durchzuführen.
Syntax der Pandas merge()-Funktion
Die Python Pandas DataFrame-merge()-Methode kann eine ganze Reihe verschiedener Parameter entgegennehmen, welche die Art und Weise der Kombination der zu verbindenden DataFrames beeinflussen. Die allgemeine Syntax der merge()-Funktion lautet dabei wie folgt:
DataFrame.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)pythonRelevante Parameter
Mithilfe der verschiedenen Parameter, die Pandas merge() entgegennimmt, spezifizierst du nicht nur die zu kombinierenden Pandas DataFrames, sondern auch die Art des Joins und weitere Details.
| Parameter | Beschreibung | Standardwert |
|---|---|---|
left
|
Erster DataFrame für die Verbindung | |
right
|
Zweiter DataFrame für die Verbindung | |
how
|
Art der Join-Operation (inner, outer, left oder right)
|
inner
|
on
|
Spalte oder Indexebene(n) als gemeinsamer Schlüssel | |
left_on
|
Spalte oder Indexebene(n) des linken DataFrames als Schlüssel | |
right_on
|
Spalte oder Indexebene(n) des rechten DataFrames als Schlüssel | |
left_index
|
Bei True dient der linke Index als Schlüssel
|
False
|
right_index
|
Bei True dient der rechte Index als Schlüssel
|
False
|
sort
|
Bei True erfolgt eine lexikographische Sortierung der Schlüssel
|
False
|
suffixes
|
Suffixe zur Eindeutigkeit gleichnamiger Spalten | ("_x", "_y")
|
copy
|
Bei False wird keine Kopie erstellt
|
True
|
Anwendung von Pandas merge()
Praktische Beispiele helfen dabei, die Funktionsweise von Pandas merge() besser zu verstehen.
INNER JOIN
Ein INNER JOIN verbindet zwei Pandas DataFrames und liefert nur jene Zeilen, bei denen die Schlüssel in beiden DataFrames identisch sind. Zuerst erstellen wir zwei DataFrames mit Beispieldaten:
import pandas as pd
# Beispiel-DataFrames
df1 = pd.DataFrame({
'Schlüssel': ['A', 'B', 'C'],
'Wert1': [1, 2, 3]
})
df2 = pd.DataFrame({
'Schlüssel': ['B', 'C', 'D'],
'Wert2': [4, 5, 6]
})
print(df1)
print(df2)pythonDie beiden DataFrames sehen so aus:
Schlüssel Wert1
0 A 1
1 B 2
2 C 3
Schlüssel Wert2
0 B 4
1 C 5
2 D 6Ein INNER JOIN lässt sich nun mit der merge()-Funktion umsetzen:
# INNER JOIN
result = pd.merge(df1, df2, how='inner', on='Schlüssel')
print(result)pythonDas Ergebnis zeigt, dass nur die Zeilen mit den Schlüsseln B und C übernommen werden, da diese in beiden ursprünglichen DataFrames vorkommen.
Schlüssel Wert1 Wert2
0 B 2 4
1 C 3 5OUTER JOIN
Ein OUTER JOIN verknüpft ebenfalls zwei DataFrames. Anders als beim INNER JOIN werden hier alle Zeilen ausgegeben, wobei fehlende Daten mit NaN befüllt werden.
# OUTER JOIN
result = pd.merge(df1, df2, how='outer', on='Schlüssel')
print(result)pythonWie erwartet enthält das Ergebnis sämtliche Zeilen beider DataFrames. Für Schlüssel A (nur in df1) und Schlüssel D (nur in df2) werden die Lücken als NaN dargestellt.
Schlüssel Wert1 Wert2
0 A 1.0 NaN
1 B 2.0 4.0
2 C 3.0 5.0
3 D NaN 6.0Alle weiteren JOIN-Varianten lassen sich auf die gleiche Weise anwenden.
Verwendung von left_on und right_on
Sollten die DataFrames unterschiedliche Namen für ihre Schlüsselspalten nutzen, kannst du dies über die Parameter left_on und right_on definieren. Dazu erstellen wir zwei neue DataFrames:
df3 = pd.DataFrame({
'Schlüssel': ['A', 'B', 'C'],
'Wert1': [1, 2, 3]
})
df4 = pd.DataFrame({
'Schlüssel2': ['B', 'C', 'D'],
'Wert2': [4, 5, 6]
})
print(df3)
print(df4)pythonDie DataFrames präsentieren sich wie folgt:
Schlüssel Wert1
0 A 1
1 B 2
2 C 3
Schlüssel2 Wert2
0 B 4
1 C 5
2 D 6Für die JOIN-Operation mit abweichenden Schlüsseln werden die Parameter left_on und right_on genutzt:
# Join mit unterschiedlichen Schlüsselspaltennamen
result = pd.merge(df3, df4, how='inner', left_on='Schlüssel', right_on='Schlüssel2')
print(result)pythonDurch die explizite Angabe von left_on='Schlüssel' und right_on='Schlüssel2' werden die passenden Spalten für die Verknüpfung herangezogen.
Schlüssel Wert1 Schlüssel2 Wert2
0 B 2 B 4
1 C 3 C 5Verwendung von Indizes als Schlüssel
Du kannst ebenso die Indizes der DataFrames als Verknüpfungsschlüssel nutzen. Setze dafür left_index und right_index auf True. Wir starten mit zwei DataFrames inklusive Indizes:
df5 = pd.DataFrame({
'Wert1': [1, 2, 3]
}, index=['A', 'B', 'C'])
df6 = pd.DataFrame({
'Wert2': [4, 5, 6]
}, index=['B', 'C', 'D'])
print(df5)
print(df6)pythonDie erstellten DataFrames sehen so aus:
Wert1
A 1
B 2
C 3
Wert2
B 4
C 5
D 6Nun erfolgt die JOIN-Operation auf Basis der Indizes:
# JOIN mit Indizes
result = pd.merge(df5, df6, how='inner', left_index=True, right_index=True)
print(result)pythonDas Resultat ist ein JOIN, der sich an den Indizes der DataFrames orientiert:
Wert1 Wert2
B 2 4
C 3 5