Pandas pd.merge() Funktion
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
# 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:
- Die beiden Tabellen sind über die
dept_idSpalte verbunden, die ihre gemeinsame Spalte ist. - 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. - 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
# 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 als
NaN。 - 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 mit
NaN.
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
# 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 Sie
left_index=Trueundright_index=TrueSie können den Index des DataFrame als Join-Schlüssel verwenden. - Übergeben Sie eine Liste an den
onParameter, um einen Multi-Key-Merge zu erreichen; alle Schlüssel müssen übereinstimmen, damit ein Datensatz beibehalten wird. - Set
indicator=Trueum eine spezielle Spalte hinzuzufügen, die anzeigt, aus welcher Tabelle jeder Datensatz stammt (left_only, right_only, both).
Andere ErweiterungenTipp:
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 Häufige Funktionen