English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

connessionePandas

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

fondere due DataFrame su una chiave

 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

fondere due DataFrame su più 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=['id', 'subject_id']))

risultato esecuzione come segue:

      Name_x   id   subject_id   Name_y
0    Alice    4          sub6    Bryce
1   Ayoung    5          sub5    Betty

fusione usando il parametro 'how'

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 fusioneequivalente SQLdescrizione
sinistroJOIN ESTerno SINISTRAusando la chiave dell'oggetto sinistro
destraJOIN ESTerno DESTRAusando la chiave corretta dell'oggetto
esternoJOIN ESTerno COMPLETOusando la chiave di unione
internoJOIN INTERNOusando l'intersezione delle chiavi

sinistra

 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

Unione destra

 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

Unione esterna

 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

Unione interna

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