English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Esempio di operazione di connessione di Pandas
Pandas ha operazioni di connessione in memoria ad alta performance con funzionalità complete simili a quelle dei database relazionali come SQL.
Pandas fornisce una singola funzione merge come punto di ingresso per tutte le operazioni di connessione di database standard tra oggetti DataFrame
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True)
In questo caso, abbiamo utilizzato i seguenti parametri:
sinistro − Un oggetto DataFrame. destra − Un altro oggetto DataFrame. su − Aggiungi la colonna (nome). Deve essere trovata in entrambi gli oggetti DataFrame sinistro e destro. left_on − Le colonne del DataFrame sinistro vengono utilizzate come chiavi. Può essere un nome di colonna o un array di lunghezza uguale alla lunghezza del DataFrame. right_on − Le colonne del DataFrame destro vengono utilizzate come chiavi. Può essere un nome di colonna o un array di lunghezza uguale alla lunghezza del DataFrame. left_index − Se impostato su True, utilizza l'indice del DataFrame sinistro (etichette di riga) come chiave di connessione. Se il DataFrame ha un MultiIndex (stratificato), il numero di livelli deve corrispondere al numero di chiavi di connessione nel DataFrame destro. right_index − Uso identico come left_index per il DataFrame corretto. come − Uno dei seguenti: 'sinistro', 'destro', 'esterno', 'interno'. Di default è interno. Ogni metodo è descritto di seguito. ordinamento − Aggiungi il dizionario in ordine alfabetico alla tabella dei risultati di ordinamento. Di default è True, in molti casi, impostare False migliora notevolmente le prestazioni.
Ora creiamo due DataFrame diversi e eseguiamo l'operazione di fusione.
# import the pandas library import pandas as pd sinistra = 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']})) stampa(left stampa(right)
risultato esecuzione come segue:
Nome id subject_id 0 Alex 1 sub1 1 Amy 2 sub2 2 Allen 3 sub4 3 Alice 4 sub6 4 Ayoung 5 sub5 Nome id subject_id 0 Billy 1 sub2 1 Brian 2 sub4 2 Bran 3 sub3 3 Bryce 4 sub6 4 Betty 5 sub5
import pandas as pd sinistra = 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'))
risultato esecuzione come segue:
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
import pandas as pd sinistra = 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']))
risultato esecuzione come segue:
Name_x id subject_id Name_y 0 Alice 4 sub6 Bryce 1 Ayoung 5 sub5 Betty
Il parametro how di fusione specifica come determinare quali chiavi devono essere incluse nella tabella di risultato. Se la combinazione di chiavi non appare né nella tabella sinistra né nella tabella destra, i valori nella tabella di fusione sono NA.
qui un riassunto su come scegliere e i loro nomi equivalenti SQL:
metodo di fusione | equivalente SQL | descrizione |
sinistro | JOIN ESTerno SINISTRA | usando la chiave dell'oggetto sinistro |
destra | JOIN ESTerno DESTRA | usando la chiave corretta dell'oggetto |
esterno | JOIN ESTerno COMPLETO | usando la chiave di unione |
interno | JOIN INTERNO | usando l'intersezione delle chiavi |
import pandas as pd sinistra = 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'))
risultato esecuzione come segue:
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
import pandas as pd sinistra = 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(sinistra, destro, su='subject_id', modo='destro'))
risultato esecuzione come segue:
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
import pandas as pd sinistra = 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(sinistra, destro, modo='esterno', su='subject_id'))
risultato esecuzione come segue:
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
La connessione viene eseguita sull'indice. L'operazione di join accetta l'oggetto che la chiama. Pertanto, a.join(b) non è uguale a b.join(a).
import pandas as pd sinistra = 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'))
risultato esecuzione come segue:
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