Pandas Datenzusammenführung (merge / join)

Pandas bietet leistungsstarke Datenzusammenführungsfunktionen, mit denen zwei oder mehr DataFrames anhand von Schlüsseln verknüpft werden können, genau wie in SQL.mergeundjoinsind die beiden am häufigsten verwendeten Methoden.


Grundlegende Verwendung von merge

pd.merge()Die Funktion wird verwendet, um zwei DataFrames spaltenweise zusammenzuführen, ähnlich der JOIN-Operation in SQL.

Einfaches Zusammenführen

Beispiel

import pandas as pd

# Zwei DataFrames erstellen
df1 = pd.DataFrame({
    "Student ID": ["S001", "S002", "S003"],
    "Name": ["Zhang San", "Li Si", "Wang Wu"]
})

df2 = pd.DataFrame({
    "Student ID": ["S001", "S002", "S003"],
    "Mathematik": [85, 92, 78]
})

print("DataFrame 1:")
print(df1)
print()

print("DataFrame 2:")
print(df2)
print()

# Zusammenführen
result = pd.merge(df1, df2, on="Student ID")
print("Zusammenführungsergebnis:")
print(result)

Zusammenführen mit unterschiedlichen Spaltennamen

Beispiel

import pandas as pd

df1 = pd.DataFrame({
    "Student ID": ["S001", "S002", "S003"],
    "Name": ["Zhang San", "Li Si", "Wang Wu"]
})

df2 = pd.DataFrame({
    "student_id": ["S001", "S002", "S003"],
    "Mathematik": [85, 92, 78]
})

# Verwende left_on und right_on
result = pd.merge(df1, df2, left_on="Student ID", right_on="student_id")
print("Merge mit unterschiedlichen Spaltennamen:")
print(result)
print()

# Redundante Spalten entfernen
result = result.drop("student_id", axis=1)
print("Nach dem Entfernen redundanter Spalten:")
print(result)

Merge-Typen

inner / left / right / outer

Beispiel

import pandas as pd

df1 = pd.DataFrame({
    "Student ID": ["S001", "S002", "S003", "S004"],
    "Name": ["Zhang San", "Li Si", "Wang Wu", "Zhao Liu"]
})

df2 = pd.DataFrame({
    "Student ID": ["S001", "S002", "S003", "S005"],
    "Mathematik": [85, 92, 78, 88]
})

print("DataFrame 1:")
print(df1)
print("\nDataFrame 2:")
print(df2)
print()

# Inner Join (Standard): nur behalten, was beide haben
print("Inner Join (Schnittmenge):")
print(pd.merge(df1, df2, on="Student ID", how="inner"))
print()

# Left Join: alle Zeilen aus der linken Tabelle behalten
print("Left Join (linke Tabelle behalten):")
print(pd.merge(df1, df2, on="Student ID", how="left"))
print()

# Right Join: alle Zeilen aus der rechten Tabelle behalten
print("Right Join (rechte Tabelle behalten):")
print(pd.merge(df1, df2, on="Student ID", how="right"))
print()

# Outer Join: alle Zeilen behalten
print("Outer Join (Vereinigung):")
print(pd.merge(df1, df2, on="Student ID", how="outer"))

Es ist wichtig, die Unterschiede zwischen den vier JOIN-Typen zu verstehen: Inner behält die Schnittmenge, Left behält alle Zeilen aus der linken Tabelle, Right behält alle Zeilen aus der rechten Tabelle, und Outer behält alle Zeilen aus beiden Tabellen.


Multi-Key-Zusammenführung

Beispiel

import pandas as pd

df1 = pd.DataFrame({
    "City": ["Beijing", "Beijing", "Shanghai", "Shanghai"],
    "Year": [2023, 2024, 2023, 2024],
    "Verkäufe": [100, 120, 90, 110]
})

df2 = pd.DataFrame({
    "City": ["Beijing", "Beijing", "Shanghai", "Shanghai"],
    "Year": [2023, 2024, 2023, 2024],
    "Profit": [20, 25, 18, 22]
})

# Multi-Key-Zusammenführung
result = pd.merge(df1, df2, on=["City", "Year"])
print("Multi-Key-Zusammenführung:")
print(result)

join-Methode

DataFrame.join()Es handelt sich um eine weitere Zusammenführungsmethode, die standardmäßig einen Left Join verwendet und nach Index zusammenführt.

Zusammenführen nach Index

Beispiel

import pandas as pd

# Daten erstellen, den Index setzen
df1 = pd.DataFrame({
    "Name": ["Zhang San", "Li Si", "Wang Wu"],
    "Alter": [25, 30, 28]
}, index=["S001", "S002", "S003"])

df2 = pd.DataFrame({
    "Mathematik": [85, 92, 78],
    "Englisch": [90, 88, 95]
}, index=["S001", "S002", "S003"])

print("DataFrame 1:")
print(df1)
print()

print("DataFrame 2:")
print(df2)
print()

# Verwende join zum Zusammenführen
result = df1.join(df2)
print("Join-Zusammenführung:")
print(result)

Multi-Tabellen-Zusammenführung

Beispiel

import pandas as pd

df1 = pd.DataFrame({
    "Name": ["Zhang San", "Li Si", "Wang Wu"]
}, index=["S001", "S002", "S003"])

df2 = pd.DataFrame({
    "Mathematik": [85, 92, 78]
}, index=["S001", "S002", "S004"])

df3 = pd.DataFrame({
    "Englisch": [90, 88, 95]
}, index=["S001", "S003", "S004"])

# Verketteter Join
result = df1.join(df2, how="left").join(df3, how="left")
print("Multi-Tabellen-Join (Left Join):")
print(result)
print()

# Verwende outer
result2 = df1.join(df2, how="outer").join(df3, how="outer")
print("Mehrtabellen-Join (Full Outer Join):")
print(result2)

Übung: Mehrtabellen-Assoziation

Beispiel

import pandas as pd

# Geschäftsdaten simulieren
# 1. Mitarbeitertabelle
employees = pd.DataFrame({
    "Mitarbeiter-ID": ["E001", "E002", "E003", "E004"],
    "Name": ["Zhang San", "Li Si", "Wang Wu", "Zhao Liu"],
    "Abteilungs-ID": ["D001", "D001", "D002", "D003"]
})

# 2. Abteilungstabelle
departments = pd.DataFrame({
    "Abteilungs-ID": ["D001", "D002", "D003"],
    "Abteilungsname": ["Technologieabteilung", "Vertriebsabteilung", "Betriebsabteilung"]
})

# 3. Gehaltstabelle
salaries = pd.DataFrame({
    "Mitarbeiter-ID": ["E001", "E002", "E003", "E004"],
    "Salary": [12000, 15000, 11000, 18000]
})

print(Schritt 1: Mitarbeiter und Abteilungen zusammenführen)
result = pd.merge(employees, departments, on="Abteilungs-ID")
print(result)
print()

print(Schritt 2: Dann Gehälter zusammenführen)
result = pd.merge(result, salaries, on="Mitarbeiter-ID")
print(result)

Auswahl: merge vs. join

Comparison merge join
Merge-Basis Column Index
Standard-join innere left
Anwendbare Szenarien Merge nach Business-Key Merge nach Primärschlüssel/Index

In den meisten Fällen ist merge flexibler, während join beim Zusammenführen nach Index prägnanter ist. Wählen Sie die geeignete Methode basierend auf der tatsächlichen Datenstruktur.

Andere Erweiterungen