pd.merge: Inner- und Outer-Joins
Führen Sie zwei DataFrames über eine gemeinsame Schlüsselspalte mit Inner- und Outer-Joins zusammen und verstehen Sie, welche Zeilen erhalten bleiben oder entfallen.
pd.merge: Inner- und Outer-Joins ist eine kostenlose Pandas & NumPy Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Pandas & NumPy Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Pandas & NumPy Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist ein Join?
Ein Join kombiniert zwei DataFrames, indem Zeilen anhand einer gemeinsamen Schlüsselspalte abgeglichen werden – dasselbe Konzept wie die JOIN-Klausel in SQL. Pandas implementiert Joins über pd.merge(). Im Gegensatz zu pd.concat(), das Daten lediglich aneinanderhängt, richtet pd.merge() Zeilen aus zwei verschiedenen Tabellen anhand übereinstimmender Werte in einer oder mehreren Spalten intelligent aneinander aus.
Die gemeinsame Schlüsselspalte
Damit ein Merge funktioniert, benötigen beide DataFrames mindestens eine Spalte mit gemeinsamen Werten – die Schlüsselspalte. Eine Tabelle orders enthält beispielsweise eine Spalte customer_id, und auch eine Tabelle customers enthält eine Spalte customer_id. Durch das Zusammenführen über customer_id werden jeder Bestellzeile Kundendetails hinzugefügt. Wenn beide DataFrames denselben Spaltennamen verwenden, geben Sie den Schlüssel mit dem Parameter on an.
import pandas as pd
orders = pd.DataFrame({
'order_id': [1, 2, 3, 4],
'customer_id': [101, 102, 101, 103],
'amount': [250, 80, 320, 150]
})
customers = pd.DataFrame({
'customer_id': [101, 102, 104],
'name': ['Alice', 'Bob', 'Diana']
})Inner Join: Schnittmenge beider Tabellen
Ein Inner Join (der Standard) behält nur Zeilen, deren Schlüsselwert in beiden DataFrames vorhanden ist. Zeilen aus einer der beiden Tabellen, für deren Schlüssel es in der anderen Tabelle keine Übereinstimmung gibt, werden stillschweigend entfernt. Im Beispiel mit den Bestellungen gibt es für die Kunden 103 und 104 keine Übereinstimmung in der jeweils anderen Tabelle, daher werden ihre Zeilen aus dem Ergebnis des Inner Joins ausgeschlossen.
# Inner join (default): only matching rows from both
result = pd.merge(orders, customers, on='customer_id', how='inner')
print(result)
# order_id customer_id amount name
# 0 1 101 250 Alice
# 1 3 101 320 Alice
# 2 2 102 80 Bob
# Order 4 (customer 103) dropped - no match in customers
# Diana (customer 104) dropped - no match in ordersOuter Join: Vereinigung beider Tabellen
Ein Outer Join (how='outer') behält alle Zeilen aus beiden DataFrames. Wenn eine Zeile keinen passenden Schlüssel in der jeweils anderen Tabelle besitzt, werden die fehlenden Spalten mit NaN gefüllt. Das ist hilfreich, wenn Sie ein vollständiges Bild beider Datensätze erhalten und auch Datensätze beibehalten möchten, für die keine Übereinstimmung gefunden wurde.
result = pd.merge(orders, customers, on='customer_id', how='outer')
print(result)
# order_id customer_id amount name
# 0 1.0 101 250.0 Alice
# 1 3.0 101 320.0 Alice
# 2 2.0 102 80.0 Bob
# 3 4.0 103 150.0 NaN <- order with unknown customer
# 4 NaN 104 NaN Diana <- customer with no ordersZusammenführen von Spalten mit unterschiedlichen Namen
Wenn die Schlüsselspalte in den beiden DataFrames unterschiedlich heißt, verwenden Sie anstelle von on die Parameter left_on und right_on. Pandas gleicht Zeilen ab, bei denen left_on im linken DataFrame dem Wert von right_on im rechten DataFrame entspricht. Beide Schlüsselspalten erscheinen im Ergebnis; die überflüssige Spalte können Sie anschließend entfernen.
products = pd.DataFrame({
'prod_id': [10, 20, 30],
'name': ['Widget', 'Gadget', 'Doohickey']
})
order_lines = pd.DataFrame({
'item_id': [10, 10, 20],
'qty': [3, 1, 5]
})
result = pd.merge(order_lines, products,
left_on='item_id', right_on='prod_id')
print(result.drop(columns='prod_id'))
# item_id qty name
# 0 10 3 Widget
# 1 10 1 Widget
# 2 20 5 GadgetZusammenführen über mehrere Spalten
Um Zeilen anhand einer Kombination von Spalten (eines zusammengesetzten Schlüssels) abzugleichen, übergeben Sie eine Liste an on. Das ist üblich, wenn eine einzelne Spalte keine eindeutige Zuordnung ermöglicht, etwa beim Zusammenführen über year und region. Alle angegebenen Spalten müssen gleichzeitig übereinstimmen, damit eine Zeile in das Ergebnis aufgenommen wird.
targets = pd.DataFrame({
'year': [2023, 2023, 2024],
'region': ['East', 'West', 'East'],
'target': [100, 150, 120]
})
actuals = pd.DataFrame({
'year': [2023, 2024, 2024],
'region': ['East', 'East', 'West'],
'actual': [95, 115, 80]
})
result = pd.merge(targets, actuals, on=['year', 'region'], how='inner')
print(result)
# year region target actual
# 0 2023 East 100 95
# 1 2024 East 120 115Umgang mit überlappenden Spaltennamen
Wenn beide DataFrames eine Spalte mit demselben Namen besitzen (außer dem Schlüssel), fügt Pandas Suffixe an, um sie zu unterscheiden. Standardmäßig sind dies _x (links) und _y (rechts). Mit dem Parameter suffixes können Sie diese anpassen, aussagekräftigere Namen erzeugen und Verwechslungen im Ergebnis vermeiden.
df_a = pd.DataFrame({'id': [1, 2], 'value': [10, 20]})
df_b = pd.DataFrame({'id': [1, 2], 'value': [100, 200]})
# Default suffixes
print(pd.merge(df_a, df_b, on='id'))
# id value_x value_y
# Custom suffixes
print(pd.merge(df_a, df_b, on='id', suffixes=('_budget', '_actual')))
# id value_budget value_actualUnerwartete Duplikate prüfen
Eine häufige Falle beim Merge ist eine unerwartete Vervielfachung von Zeilen. Wenn die Schlüsselspalte in beiden DataFrames doppelte Werte enthält, erzeugt der Merge für alle übereinstimmenden Zeilen ein kartesisches Produkt. Prüfen Sie nach einem Merge immer die Zeilenanzahl: Wenn sie größer als erwartet ist, untersuchen Sie Duplikate in der Schlüsselspalte mit df.duplicated(subset=['key']).sum().
# Both tables have duplicate keys -> cartesian product
left = pd.DataFrame({'id': [1, 1], 'val_l': ['a', 'b']})
right = pd.DataFrame({'id': [1, 1], 'val_r': ['x', 'y']})
result = pd.merge(left, right, on='id')
print(len(result)) # 4 rows! (2x2 cartesian product)
print(result)
# id val_l val_r
# 0 1 a x
# 1 1 a y
# 2 1 b x
# 3 1 b ySicherheit durch den Parameter validate
Übergeben Sie den Parameter validate, um Beziehungseinschränkungen für den Merge durchzusetzen und bei deren Verletzung einen Fehler auszulösen. 'one_to_one' erfordert eindeutige Schlüssel in beiden Tabellen, 'one_to_many' nur eindeutige Schlüssel in der linken Tabelle und 'many_to_one' nur in der rechten. Das ist eine ausgezeichnete defensive Programmierpraxis, die Probleme mit der Datenqualität frühzeitig erkennt.
# Safe merge: validate that customer_id is unique in customers
try:
result = pd.merge(orders, customers,
on='customer_id',
how='inner',
validate='many_to_one')
print('Merge OK, shape:', result.shape)
except Exception as e:
print('Merge error:', e)Abdeckung mit indicator prüfen
Übergeben Sie indicator=True, um dem Ergebnis eine Spalte _merge hinzuzufügen, die zeigt, woher jede Zeile stammt: 'left_only', 'right_only' oder 'both'. Das ist nach einem Outer Join hilfreich, um zu erkennen, welche Datensätze eine Übereinstimmung gefunden haben und welche nicht. So können Sie die Datenqualität prüfen, bevor Sie die Indikatorspalte entfernen.
result = pd.merge(orders, customers, on='customer_id',
how='outer', indicator=True)
print(result['_merge'].value_counts())
# both 3
# left_only 1 <- orders with no customer record
# right_only 1 <- customers with no orders
# Find unmatched orders
print(result[result['_merge'] == 'left_only'])Zusammenfassung: Inner gegenüber Outer
Zusammengefasst gilt für die beiden Join-Typen: Ein Inner Join liefert die Schnittmenge – nur Zeilen mit übereinstimmenden Schlüsseln in beiden DataFrames. Ein Outer Join liefert die Vereinigung – alle Zeilen aus beiden DataFrames, wobei bei fehlender Übereinstimmung NaN eingetragen wird. Der Vollständigkeit halber: Ein Left Join behält alle Zeilen aus dem linken DataFrame, ein Right Join alle Zeilen aus dem rechten DataFrame. Diese Themen werden in der nächsten Lektion behandelt.
# Quick reference
# how='inner' -> intersection: only matched rows
# how='outer' -> union: all rows from both, NaN for no match
# how='left' -> all left rows + matched right rows
# how='right' -> all right rows + matched left rows
# Most common: inner (default) for enrichment, left for preserving recordsKurze Überprüfung
Testen Sie Ihr Verständnis der Inner- und Outer-Joins mit pd.merge() aus dieser Lektion.
Zusammenfassung der Lektion
In dieser Lektion haben Sie gelernt: pd.merge() mit how='inner' behält nur übereinstimmende Zeilen aus beiden DataFrames, während how='outer' alle Zeilen behält und für nicht übereinstimmende Zeilen NaN einträgt; on gibt den gemeinsamen Schlüssel an, während left_on/right_on unterschiedliche Spaltennamen verarbeiten; und der Parameter indicator hilft dabei zu prüfen, welche Zeilen übereinstimmen. Als Nächstes untersuchen wir Left und Right Joins, um alle Zeilen einer Seite beizubehalten.
Häufig gestellte Fragen
Ist die Lektion „pd.merge: Inner- und Outer-Joins“ kostenlos?
Ja — der vollständige Text von „pd.merge: Inner- und Outer-Joins“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Pandas & NumPy Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Pandas & NumPy Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „pd.merge: Inner- und Outer-Joins“?
Führen Sie zwei DataFrames über eine gemeinsame Schlüsselspalte mit Inner- und Outer-Joins zusammen und verstehen Sie, welche Zeilen erhalten bleiben oder entfallen. Du übst Pandas & NumPy Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Pandas & NumPy Academy zu starten?
Keine Vorkenntnisse erforderlich. Pandas & NumPy Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „pd.merge: Inner- und Outer-Joins“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Pandas & NumPy Academy-Lektion Code schreiben und ausführen?
Ja. Jede Pandas & NumPy Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- pd.concat zum Stapeln von DataFrames
- pd.merge: Inner- und Outer-Joins
- Left- und Right-Joins
- Über den Index verknüpfen