Python Pandas: DataFrames mit merge() verbinden
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.
- Flexibel: Hosting, das jedem Website-Traffic standhält
- Verlässlich: Inklusive 24/7-Support und persönlicher Beratung
- Sicher: Kostenloses SSL-Zertifikat, DDoS-Schutz und Backups
Syntax von Pandas merge()-Funktion
Python Pandas DataFrame-merge()-Methode kann eine ganze Reihe verschiedener Parameter entgegennehmen, die 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)pythonDie Pandas merge()-Funktion gleicht der SQL-JOIN-Operation in relationalen Datenbanken. Wenn Sie also bereits mit Datenbanksprachen wie SQL vertraut sind, kann das beim Verständnis von Pandas DataFrame-merge()-Methode helfen. Zu beachten ist jedoch, dass das Verhalten stellenweise abweicht: Beinhalten beide der Schlüsselspalten Werte, an denen der Schlüssel zu null auswertet, werden diese ebenfalls zusammengeführt.
Relevante Parameter
Mithilfe der verschiedenen Parameter, die Pandas merge() entgegennimmt, spezifizieren Sie nicht nur die zu kombinierenden Pandas DataFrames, sondern auch die Art des Joins und weitere Details.
| Parameter | Beschreibung | Standardwert |
|---|---|---|
left
|
Erster DataFrame, der verbunden werden soll | |
right
|
Zweiter DataFrame, der verbunden werden soll | |
how
|
Art der durchzuführenden Join-Operation (inner, outer, left oder right)
|
inner
|
on
|
Spalte oder Indexebene(n), die als Schlüssel verwendet werden; muss in beiden DataFrames vorhanden sein | |
left_on
|
Spalte oder Indexebene(n) des linken DataFrames, die als Schlüssel verwendet werden | |
right_on
|
Spalte oder Indexebene(n) des rechten DataFrames, die als Schlüssel verwendet werden | |
left_index
|
Wenn True, wird Index des linken DataFrames als Schlüssel genutzt
|
False
|
right_index
|
Wenn True, wird Index des rechten DataFrames als Schlüssel genutzt
|
False
|
sort
|
Wenn True, werden die resultierenden DataFrame-Schlüssel lexikographisch sortiert.
|
False
|
suffixes
|
Suffixes, die genutzt werden, um gleichnamige Spalten eindeutig zu machen | ("_x", "_y")
|
copy
|
Wenn False, wird eine Kopie vermieden
|
True
|
Anwendung von Pandas merge()
Verschiedene Beispiele können dabei helfen, die Vorgehensweise der Pandas merge()-Funktion nachzuvollziehen.
INNER JOIN
Ein INNER JOIN verbindet zwei Pandas DataFrames und gibt nur die Zeilen zurück, bei denen die Schlüssel in beiden DataFrames übereinstimmen. Zunächst werden zwei DataFrames mit Beispieldaten erstellt:
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 resultierenden DataFrames sehen folgendermaßen aus:
Schlüssel Wert1
0 A 1
1 B 2
2 C 3
Schlüssel Wert2
0 B 4
1 C 5
2 D 6Man kann nun einen INNER JOIN durchführen, indem die merge()-Funktion genutzt wird:
# INNER JOIN
result = pd.merge(df1, df2, how='inner', on='Schlüssel')
print(result)pythonDie Ausgabe zeigt, dass in diesem Beispiel nur die Zeilen mit den Schlüsseln B und C in den Ergebnis-DataFrame aufgenommen werden, da diese in beiden ursprünglichen DataFrames vorhanden sind.
Schlüssel Wert1 Wert2
0 B 2 4
1 C 3 5OUTER JOIN
Ein OUTER JOIN verbindet ebenfalls zwei DataFrames miteinander. Im Gegensatz zum INNER JOIN werden alle Zeilen zurückgegeben, wobei fehlende Werte mit NaN aufgefüllt werden.
# OUTER JOIN
result = pd.merge(df1, df2, how='outer', on='Schlüssel')
print(result)pythonWie erwartet werden im Ergebnis-DataFrame alle Zeilen aus beiden DataFrames einbezogen. Für den Schlüssel A, der nur in df1 vorhanden ist, und den Schlüssel D, der nur in df2 vorhanden ist, werden die fehlenden Werte als NaN eingefügt.
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 anderen bekannten JOIN-Varianten funktionieren quasi analog.
Verwendung von left_on und right_on
Manchmal haben die beiden DataFrames unterschiedliche Schlüsselspaltennamen. In diesem Fall können Sie die Parameter left_on und right_on verwenden, um anzugeben, welche Spalten verwendet werden sollen. Hierzu werden zunächst zwei neue DataFrames erstellt:
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 beiden 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 6Um die JOIN-Operation mit unterschiedlichen Schlüsseln vorzunehmen, werden nun die Parameter left_on und right_on spezifiziert:
# 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 Nutzung von left_on='Schlüssel' und right_on='Schlüssel2' werden die entsprechenden Schlüsselspalten für die Verbindung genutzt.
Schlüssel Wert1 Schlüssel2 Wert2
0 B 2 B 4
1 C 3 C 5Verwendung von Indizes als Schlüssel
Sie können auch die Indizes der DataFrames als Schlüssel für die Verbindung verwenden, indem Sie die Parameter left_index und right_index auf True setzen. Es werden zunächst zwei neue DataFrames mit Indizes erstellt:
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 im obigen Code erstellten DataFrames sind die Folgenden:
Wert1
A 1
B 2
C 3
Wert2
B 4
C 5
D 6Nun kann eine JOIN-Operation basierend auf den Indizes durchgeführt werden:
# JOIN mit Indizes
result = pd.merge(df5, df6, how='inner', left_index=True, right_index=True)
print(result)pythonDas Ergebnis ist wenig überraschend ein JOIN basierend auf den Indizes der DataFrames:
Wert1 Wert2
B 2 4
C 3 5