Python Pandas - Zusammenführen / Beitreten
Pandas verfügt über leistungsstarke In-Memory-Join-Vorgänge mit vollem Funktionsumfang, die relationalen Datenbanken wie SQL idiomatisch sehr ähnlich sind.
Pandas bietet eine einzige Funktion: merge, als Einstiegspunkt für alle Standard-Datenbankverbindungsvorgänge zwischen DataFrame-Objekten -
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True)
Hier haben wir die folgenden Parameter verwendet -
left - Ein DataFrame-Objekt.
right - Ein weiteres DataFrame-Objekt.
on- Spalten (Namen), an denen Sie teilnehmen möchten. Muss sowohl im linken als auch im rechten DataFrame-Objekt gefunden werden.
left_on- Spalten aus dem linken DataFrame, die als Schlüssel verwendet werden sollen. Kann entweder Spaltennamen oder Arrays sein, deren Länge der Länge des DataFrame entspricht.
right_on- Spalten aus dem rechten DataFrame, die als Schlüssel verwendet werden sollen. Kann entweder Spaltennamen oder Arrays sein, deren Länge der Länge des DataFrame entspricht.
left_index - Wenn True,Verwenden Sie den Index (Zeilenbeschriftungen) aus dem linken DataFrame als Join-Schlüssel. Bei einem DataFrame mit einem MultiIndex (hierarchisch) muss die Anzahl der Ebenen mit der Anzahl der Join-Schlüssel aus dem rechten DataFrame übereinstimmen.
right_index - Gleiche Verwendung wie left_index für den richtigen DataFrame.
how- Eine von "links", "rechts", "außen", "innen". Der Standardwert ist inner. Jede Methode wurde unten beschrieben.
sort- Sortieren Sie das Ergebnis DataFrame nach den Verknüpfungsschlüsseln in lexikografischer Reihenfolge. Der Standardwert ist True. Wenn Sie den Wert auf False setzen, wird die Leistung in vielen Fällen erheblich verbessert.
Lassen Sie uns nun zwei verschiedene DataFrames erstellen und die Zusammenführungsvorgänge ausführen.
# import the pandas library
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame(
{'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print left
print right
Es ist output ist wie folgt -
Name id subject_id
0 Alex 1 sub1
1 Amy 2 sub2
2 Allen 3 sub4
3 Alice 4 sub6
4 Ayoung 5 sub5
Name id subject_id
0 Billy 1 sub2
1 Brian 2 sub4
2 Bran 3 sub3
3 Bryce 4 sub6
4 Betty 5 sub5
Führen Sie zwei DataFrames auf einem Schlüssel zusammen
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left,right,on='id')
Es ist output ist wie folgt -
Name_x id subject_id_x Name_y subject_id_y
0 Alex 1 sub1 Billy sub2
1 Amy 2 sub2 Brian sub4
2 Allen 3 sub4 Bran sub3
3 Alice 4 sub6 Bryce sub6
4 Ayoung 5 sub5 Betty sub5
Führen Sie zwei DataFrames auf mehreren Schlüsseln zusammen
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left,right,on=['id','subject_id'])
Es ist output ist wie folgt -
Name_x id subject_id Name_y
0 Alice 4 sub6 Bryce
1 Ayoung 5 sub5 Betty
Zusammenführen mit dem Argument 'wie'
Das howDas zusammenzuführende Argument gibt an, wie bestimmt wird, welche Schlüssel in die resultierende Tabelle aufgenommen werden sollen. Wenn eine Tastenkombination weder in der linken noch in der rechten Tabelle angezeigt wird, sind die Werte in der verknüpften Tabelle NA.
Hier ist eine Zusammenfassung der how Optionen und ihre SQL-äquivalenten Namen -
Zusammenführungsmethode | SQL-Äquivalent | Beschreibung |
---|---|---|
links | LINKE ÄUSSERE VERBINDUNG | Verwenden Sie die Tasten des linken Objekts |
Recht | RIGHT OUTER JOIN | Verwenden Sie Schlüssel vom rechten Objekt |
äußere | VOLLSTÄNDIGER OUTER JOIN | Verwenden Sie die Vereinigung von Schlüsseln |
innere | INNER JOIN | Verwenden Sie den Schnittpunkt der Schlüssel |
Links beitreten
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='left')
Es ist output ist wie folgt -
Name_x id_x subject_id Name_y id_y
0 Alex 1 sub1 NaN NaN
1 Amy 2 sub2 Billy 1.0
2 Allen 3 sub4 Brian 2.0
3 Alice 4 sub6 Bryce 4.0
4 Ayoung 5 sub5 Betty 5.0
Right Join
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='right')
Es ist output ist wie folgt -
Name_x id_x subject_id Name_y id_y
0 Amy 2.0 sub2 Billy 1
1 Allen 3.0 sub4 Brian 2
2 Alice 4.0 sub6 Bryce 4
3 Ayoung 5.0 sub5 Betty 5
4 NaN NaN sub3 Bran 3
Äußere Verbindung
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, how='outer', on='subject_id')
Es ist output ist wie folgt -
Name_x id_x subject_id Name_y id_y
0 Alex 1.0 sub1 NaN NaN
1 Amy 2.0 sub2 Billy 1.0
2 Allen 3.0 sub4 Brian 2.0
3 Alice 4.0 sub6 Bryce 4.0
4 Ayoung 5.0 sub5 Betty 5.0
5 NaN NaN sub3 Bran 3.0
Inner Join
Die Verknüpfung wird für den Index durchgeführt. Die Verknüpfungsoperation berücksichtigt das Objekt, für das sie aufgerufen wird. Damit,a.join(b) ist ungleich zu b.join(a).
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='inner')
Es ist output ist wie folgt -
Name_x id_x subject_id Name_y id_y
0 Amy 2 sub2 Billy 1
1 Allen 3 sub4 Brian 2
2 Alice 4 sub6 Bryce 4
3 Ayoung 5 sub5 Betty 5