Panda Python - Unione / Unione
Pandas ha operazioni di join in memoria complete e ad alte prestazioni idiomaticamente molto simili ai database relazionali come SQL.
Pandas fornisce un'unica funzione, merge, come punto di ingresso per tutte le operazioni di join 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)
Qui abbiamo utilizzato i seguenti parametri:
left - Un oggetto DataFrame.
right - Un altro oggetto DataFrame.
on- Colonne (nomi) a cui unirsi. Deve essere trovato negli oggetti DataFrame sinistro e destro.
left_on- Colonne dal DataFrame sinistro da utilizzare come chiavi. Possono essere nomi di colonna o array con lunghezza uguale alla lunghezza del DataFrame.
right_on- Colonne dal DataFrame destro da utilizzare come chiavi. Possono essere nomi di colonna o array con lunghezza uguale alla lunghezza del DataFrame.
left_index - Se True,utilizzare l'indice (etichette di riga) dal DataFrame sinistro come chiave di unione. In caso di un DataFrame con un MultiIndex (gerarchico), il numero di livelli deve corrispondere al numero di chiavi di join dal DataFrame destro.
right_index - Stesso utilizzo di left_index per il giusto DataFrame.
how- Uno tra "sinistro", "destro", "esterno", "interno". Il valore predefinito è interno. Ciascun metodo è stato descritto di seguito.
sort- Ordina il DataFrame del risultato in base alle chiavi di join in ordine lessicografico. Il valore predefinito è True, l'impostazione su False migliorerà sostanzialmente le prestazioni in molti casi.
Creiamo ora due diversi DataFrame ed eseguiamo le operazioni di unione su di esso.
# 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
Suo output è il seguente -
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
Unisci due DataFrame su una chiave
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')
Suo output è il seguente -
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
Unisci due DataFrame su più chiavi
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'])
Suo output è il seguente -
Name_x id subject_id Name_y
0 Alice 4 sub6 Bryce
1 Ayoung 5 sub5 Betty
Unisci usando l'argomento "come"
Il howL'argomento da unire specifica come determinare quali chiavi devono essere incluse nella tabella risultante. Se una combinazione di tasti non appare né nella tabella sinistra né in quella destra, i valori nella tabella unita saranno NA.
Ecco un riassunto del how opzioni e i loro nomi equivalenti SQL -
Metodo di unione | Equivalente SQL | Descrizione |
---|---|---|
sinistra | UNISCI ESTERNO SINISTRO | Usa i tasti dell'oggetto sinistro |
destra | PARTE ESTERNA DESTRA | Usa i tasti dell'oggetto destro |
esterno | FULL OUTER JOIN | Usa l'unione delle chiavi |
interno | INNER JOIN | Usa l'intersezione delle chiavi |
Unisciti a sinistra
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')
Suo output è il seguente -
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')
Suo output è il seguente -
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
Outer 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, how='outer', on='subject_id')
Suo output è il seguente -
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
L'unione verrà eseguita su index. L'operazione di join rispetta l'oggetto su cui viene chiamato. Così,a.join(b) non è uguale a 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')
Suo output è il seguente -
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