Pandas pd.merge() Funktion

Pandas 通用函数Pandas Häufige Funktionen


pd.merge()ist eine Funktion in der Pandas-Bibliothek, die verwendet wird, umzwei DataFrames anhand einer Spalte zu verbinden. Sie ähnelt der JOIN-Operation in SQL und kann zwei Datentabellen basierend auf einer oder mehreren gemeinsamen Spalten zu einer zusammenführen.

Dies ist eine der am häufigsten verwendeten Merge-Methoden in der Datenanalyse und -verarbeitung. Sie eignet sich besonders für die Verarbeitung relationaler Daten und dafür, zusammengehörige Informationen, die über verschiedene Tabellen verteilt sind, zusammenzuführen.

Worterklärung: mergebedeutet "zusammenführen, kombinieren"; hier bezieht es sich darauf, zwei Datentabellen anhand eines gemeinsamen Schlüssels zusammenzuführen.


Grundlegende Syntax und Parameter

pd.merge()ist eine Top-Level-Funktion in der Pandas-Bibliothek, die verwendet wird, um Operationen ähnlich wie JOIN in SQL zu implementieren.

Syntaxformat

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)

Parameterbeschreibung

  • Parameter: left
    • Typ: DataFrame.
    • Beschreibung: Das linke DataFrame, die erste Tabelle, die am Merge teilnimmt.
  • Parameter: right
    • Typ: DataFrame.
    • Beschreibung: Das rechte DataFrame, die zweite Tabelle, die am Merge teilnimmt.
  • Parameter: on
    • Typ: String oder Liste von Strings.
    • Beschreibung: Der Spaltenname (Schlüssel), der zum Verbinden verwendet wird. Sowohl linke als auch rechte DataFrames müssen Spalten mit demselben Namen haben. Wenn nicht angegeben, werden automatisch Spalten mit demselben Namen wie der Schlüssel gefunden.
  • Parameter: how
    • Typ: String ('left', 'right', 'outer', 'inner').
    • Beschreibung: Die Merge-Methode, ähnlich den SQL-JOIN-Typen.'inner'steht für Inner Join (Schnittmenge),'outer'steht für Outer Join (Vereinigung),'left'steht für Left Join (behält alle Datensätze der linken Tabelle bei),'right'steht für Right Join (behält alle Datensätze der rechten Tabelle bei). Standard ist'inner'。
  • Parameter: left_on
    • Typ: String oder Liste von Strings.
    • Beschreibung: Der Spaltenname im linken DataFrame, der als Join-Schlüssel verwendet wird. Wird verwendet, wenn die Spaltennamen der Join-Schlüssel der linken und rechten Tabelle unterschiedlich sind.
  • Parameter: right_on
    • Typ: String oder Liste von Strings.
    • Beschreibung: Der Spaltenname im rechten DataFrame, der als Join-Schlüssel verwendet wird. Wird verwendet, wenn die Spaltennamen der Join-Schlüssel der linken und rechten Tabelle unterschiedlich sind.
  • Parameter: suffixes
    • Typ: Tupel.
    • Beschreibung: Wenn die linke und rechte Tabelle Spalten mit demselben Namen haben (keine Join-Schlüssel), die Suffixe, mit denen sie unterschieden werden. Standard ist('_x', '_y')。

Funktionsbeschreibung

  • Rückgabewert: Gibt das zusammengeführte DataFrame zurück.
  • Wirkung: Führt zwei DataFrames horizontal zu einem DataFrame gemäß dem angegebenen Schlüssel und der Methode zusammen.

Beispiele

Lassen Sie uns anhand einer Reihe von Beispielen von einfach bis komplex gründlich meisternpd.merge()die Verwendung von.

Beispiel 1: Grundlegende Verwendung – Inner Join basierend auf einer einzelnen Spalte

Beispiel

import pandas as pd

# 1. Erstelle zwei DataFrames
employees = pd.DataFrame({
    'emp_id': [101, 102, 103, 104],
    'name': ['Alice', 'Bob', 'Charlie', 'Diana'],
    'dept_id': [1, 2, 1, 2]
})

departments = pd.DataFrame({
    'dept_id': [1, 2, 3],
    'dept_name': ['Engineering', 'Sales', 'Marketing']
})

print("=== Mitarbeiter-Tabelle (employees) ===")
print(employees)

print("\n=== Abteilungstabelle (departments) ===")
print(departments)

# 2. Verwenden Sie pd.merge(), um basierend auf der Spalte dept_id zu verbinden (Inner Join, Standard)
result = pd.merge(employees, departments, on='dept_id')
print("\n=== pd.merge(employees, departments, on='dept_id') Inner Join ===")
print(result)

Erwartetes Ausführungsergebnis:

=== 员工表 (employees) ===
   emp_id     name  dept_id
0     101    Alice         1
1     102      Bob         2
2     103  Charlie         1
3     104   Diana         2

=== 部门表 (departments) ===
   dept_id  dept_name
0        1  Engineering
1        2       Sales
2        3    Marketing

=== pd.merge(employees, departments, on='dept_id') 内连接 ===
   emp_id     name  dept_id    dept_name
0     101    Alice         1  Engineering
1     103  Charlie         1  Engineering
2     102      Bob         2       Sales
3     104   Diana         2       Sales

Codeanalyse:

  1. Die beiden Tabellen sind über diedept_idSpalte verbunden, die ihre gemeinsame Spalte ist.
  2. Standardmäßig wird Inner Join verwendet (how='inner'), wobei nur Schlüsselwerte beibehalten werden, die auf beiden Seiten vorhanden sind (dept_id 1 und 2), sodass die Marketing-Abteilung mit dept_id 3 ausgeschlossen wird.
  3. Nach dem Zusammenführen ist jeder Mitarbeiter dem entsprechenden Abteilungsnamen zugeordnet.

Beispiel 2: Left Join und Right Join

Mit derhowParameter kann die Merge-Methode steuern und alle Datensätze von einer Seite beibehalten.

Beispiel

import pandas as pd

# Weiterhin die obigen Daten verwenden
employees = pd.DataFrame({
    'emp_id': [101, 102, 103, 104],
    'name': ['Alice', 'Bob', 'Charlie', 'Diana'],
    'dept_id': [1, 2, 1, 2]
})

departments = pd.DataFrame({
    'dept_id': [1, 2, 3],
    'dept_name': ['Engineering', 'Sales', 'Marketing']
})

# 1. Left join - alle Datensätze aus der linken Tabelle beibehalten
print("=== Left join (how='left') ===")
left_result = pd.merge(employees, departments, on='dept_id', how='left')
print(left_result)

# 2. Right join - alle Datensätze aus der rechten Tabelle beibehalten
print("\n=== Right join (how='right') ===")
right_result = pd.merge(employees, departments, on='dept_id', how='right')
print(right_result)

# 3. Outer Join - alle Datensätze aus beiden Tabellen beibehalten
print("\n=== Outer Join (how='outer') ===")
outer_result = pd.merge(employees, departments, on='dept_id', how='outer')
print(outer_result)

Erwartetes Ausführungsergebnis:

=== 左连接 (how='left') ===
   emp_id     name  dept_id    dept_name
0     101    Alice         1  Engineering
1     103  Charlie         1  Engineering
2     102      Bob         2       Sales
3     104   Diana         2       Sales

=== 右连接 (how='right') ===
   emp_id     name  dept_id    dept_name
0     101    Alice         1  Engineering
1     103  Charlie         1  Engineering
2     102      Bob         2       Sales
3     104   Diana         2       Sales
4     NaN     NaN         3    Marketing

=== 外连接 (how='outer') ===
   emp_id     name  dept_id    dept_name
0     101    Alice         1  Engineering
1     103  Charlie         1  Engineering
2     102      Bob         2       Sales
3     104   Diana         2       Sales
4     NaN     NaN         3    Marketing

Codeanalyse:

  • Der Left Join behält alle Mitarbeiterdatensätze aus der linken Tabelle (employees) bei, und Abteilungen ohne Übereinstimmung in der rechten Tabelle werden alsNaN。
  • Der Right Join behält alle Abteilungen aus der rechten Tabelle (departments) bei, auch wenn kein Mitarbeiter zu dieser Abteilung gehört.
  • Der Outer Join behält alle Datensätze aus beiden Tabellen bei, und nicht übereinstimmende Felder werden mitNaN.

Beispiel 3: Umgang mit zwei Tabellen mit unterschiedlichen Spaltennamen

Wenn die Namen der Join-Schlüsselspalten der beiden Tabellen unterschiedlich sind, können Sie dieleft_onundright_onParameter, um sie separat anzugeben.

Beispiel

import pandas as pd

# 1. Zwei DataFrames mit unterschiedlichen Spaltennamen erstellen
students = pd.DataFrame({
    'student_id': [1, 2, 3, 4],
    'name': ['Alice', 'Bob', 'Charlie', 'Diana'],
    'class_id': [101, 102, 101, 103]
})

classes = pd.DataFrame({
    'class_id': [101, 102, 103],
    'class_name': ['Klasse A', 'Klasse B', 'Klasse C'],
    'teacher': ['Herr Smith', 'Frau Johnson', 'Frau Lee']
})

print("=== Studententabelle ===")
print(students)

print("\n=== Klassentabelle ===")
print(classes)

# 2. Verwenden Sie left_on und right_on, um unterschiedliche Spaltennamen zu behandeln
result = pd.merge(students, classes, left_on='class_id', right_on='class_id')
print("\n=== Merge mit unterschiedlichen Spaltennamen ===")
print(result)

Erwartetes Ausführungsergebnis:

=== 学生表 ===
   student_id     name  class_id
0            1    Alice       101
1            2      Bob       102
2            3  Charlie       101
3            4    Diana       103

=== 班级表 ===
   class_id class_name   teacher
0       101   Class A  Mr. Smith
1       102   Class B  Ms. Johnson
2       103   Class C   Mrs. Lee

=== 不同列名时的合并 ===
   student_id     name  class_id class_name   teacher
0            1    Alice       101   Class A  Mr. Smith
1            3  Charlie       101   Class A  Mr. Smith
2            2      Bob       102   Class B  Indicator False
3            indicator column

print("\n=== indicator=True 显示合并详情 ===")
print(result_indicator)
[/mycode4]</div>
</div>

<p><strong>运行结果预期:</strong></p>
<pre>
=== 索引作为连接键 ===
   name     city  score  subject  grade
0  Alice  Beijing    85     Math      A
1    Bob   Shanghai  90     Math      B
2  Charlie   Guangzhou  95    English   A
3  Diana    Shenzhen    88    English   B

=== 多个键的合并 ===
   student_id  name  course_id  course_name  score
0           1  Alice       101     Math       90
1           1  Alice       102     English    85
2           2    Bob       101     Math       88
3           2    Bob       103     Science    92
4           3  Charlie       102     English    95

=== indicator=True 显示合并详情 ===
   name  city     merge_info
0  Alice  Beijing        both
1    Bob  Shanghai      both
2  Charlie  Guangzhou    left_only
3  Diana   Shenzhen    left_only

Codeanalyse:

  • Verwenden Sieleft_index=Trueundright_index=TrueSie können den Index des DataFrame als Join-Schlüssel verwenden.
  • Übergeben Sie eine Liste an denonParameter, um einen Multi-Key-Merge zu erreichen; alle Schlüssel müssen übereinstimmen, damit ein Datensatz beibehalten wird.
  • Setindicator=Trueum eine spezielle Spalte hinzuzufügen, die anzeigt, aus welcher Tabelle jeder Datensatz stammt (left_only, right_only, both).

Tipp: pd.merge()ist für spaltenbasierte Merge-Operationen geeignet. Wenn Sie Daten nur einfach vertikal anhängen müssen (Zeilen hinzufügen), verwenden Sie diepd.concat()Funktion.

Pandas 常用函数Pandas Häufige Funktionen

Andere Erweiterungen