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

Conjonction Pandas

Exemple d'opération de connexion Pandas

Pandas dispose d'opérations de connexion en mémoire à haute performance et fonctionnelles, très similaires à celles des bases de données relationnelles telles que SQL.
Pandas fournit une fonction merge unique en tant qu'entrée pour toutes les opérations de jointure standard de base de données entre les objets DataFrame.

 pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
 left_index=False, right_index=False, sort=True)

Ici, nous utilisons les paramètres suivants :

left − Un objet DataFrame. right − Un autre objet DataFrame. on − Ajouter les colonnes (noms) en haut. Doit être trouvé dans les objets DataFrame de gauche et de droite. left_on − Les colonnes du DataFrame gauche sont utilisées comme clé. Cela peut être un nom de colonne ou un tableau de longueur égale à la longueur du DataFrame. right_on − Les colonnes du DataFrame droit sont utilisées comme clé. Cela peut être un nom de colonne ou un tableau de longueur égale à la longueur du DataFrame. left_index − Si True, utiliser l'index gauche (étiquette de ligne) du DataFrame comme clé de connexion. Si le DataFrame a un MultiIndex (index hiérarchique), le nombre de niveaux doit correspondre au nombre de clés de connexion du DataFrame droit. right_index − Utiliser de la même manière que left_index pour le bon DataFrame. how − Un des éléments suivants : 'gauche', 'droite', 'externe', 'interne'. Par défaut, c'est interne. Chaque méthode est décrite ci-dessous. sort − Ajouter les données de résultats triées dans l'ordre alphabétique des clés du dictionnaire. Par défaut, c'est True, mais dans de nombreux cas, le réglage à False améliorera considérablement les performances.

Maintenant, créons deux DataFrame différents et exécutons des opérations de fusion sur eux.

# import the pandas library
 import pandas as pd
 left = pd.DataFrame({
    1',2',3',4',5,
    'Nom': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
    'Nom': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],1','sub2','sub4','sub6','sub5']})
 right = pd.DataFrame(
    {'id': [1',2',3',4',5,
    ],
    'Nom': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],2','sub4','sub3','sub6','sub5})
 print(left
 print(right)

Le résultat de l'exécution est le suivant :

      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

fusionner deux cadres de données sur une clé

 import pandas as pd
 left = pd.DataFrame({
    1',2',3',4',5,
    'Nom': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
    'Nom': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],1','sub2','sub4','sub6','sub5']})
 right = pd.DataFrame({
 1',2',3',4',5,
    ],
    'Nom': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],2','sub4','sub3','sub6','sub5']})
 print(pd.merge(left, right, on='id'))

Le résultat de l'exécution est le suivant :

     Name  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

fusionner deux cadres de données sur plusieurs clés

 import pandas as pd
 left = pd.DataFrame({
    1',2',3',4',5,
    'Nom': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
    'Nom': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],1','sub2','sub4','sub6','sub5']})
 right = pd.DataFrame({
 1',2',3',4',5,
    ],
    'Nom': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],2','sub4','sub3','sub6','sub5']})
 print(pd.merge(left, right, on=['id', 'subject_id']))

Le résultat de l'exécution est le suivant :

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

fusionner en utilisant le paramètre 'how'

Le paramètre how de fusion détermine comment déterminer quels clés doivent être inclus dans le tableau de résultats. Si la clé de combinaison n'apparaît pas dans la table de gauche ou la table de droite, la valeur dans le tableau de fusion est NA.

Voici un résumé sur la manière de choisir et leurs noms équivalents SQL:

méthode de fusionÉquivalent SQLdescription
leftJOIN EXTÉRIEUR À GAUCHEutiliser la clé de l'objet de gauche
rightJOIN EXTÉRIEUR À DROITEutiliser la clé de l'objet correct
outerJOIN EXTÉRIEUR COMPLETutiliser la clé conjointe
innerJOIN INTÉRIEURutiliser l'intersection des clés

joindre en externe à gauche

 import pandas as pd
 left = pd.DataFrame({
    1',2',3',4',5,
    'Nom': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
    'Nom': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],1','sub2','sub4','sub6','sub5']})
 right = pd.DataFrame({
    1',2',3',4',5,
    ],
    'Nom': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],2','sub4','sub3','sub6','sub5']})
 print(pd.merge(left, right, on='subject_id', how='left'))

Le résultat de l'exécution est le suivant :

      Nom_x  id_x  subject_id  Nom_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

joindre en externe à droite

 import pandas as pd
 left = pd.DataFrame({
    1',2',3',4',5,
    'Nom': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
    'Nom': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],1','sub2','sub4','sub6','sub5']})
 right = pd.DataFrame({
    1',2',3',4',5,
    ],
    'Nom': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],2','sub4','sub3','sub6','sub5']})
 print(pd.merge(left, right, on='subject_id', how='right'))

Le résultat de l'exécution est le suivant :

      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

joindre en externe

 import pandas as pd
 left = pd.DataFrame({
    1',2',3',4',5,
    'Nom': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
    'Nom': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],1','sub2','sub4','sub6','sub5']})
 right = pd.DataFrame({
    1',2',3',4',5,
    ],
    'Nom': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],2','sub4','sub3','sub6','sub5']})
 print(pd.merge(left, right, how='outer', on='subject_id'))

Le résultat de l'exécution est le suivant :

      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

Jointure interne

La connexion s'exécute sur l'index. L'opération de jointure accepte l'objet appelant. Par conséquent, a.join(b) n'est pas égal à b.join(a).

 import pandas as pd
 left = pd.DataFrame({
    1',2',3',4',5,
    'Nom': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
    'Nom': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],1','sub2','sub4','sub6','sub5']})
 right = pd.DataFrame({
    1',2',3',4',5,
    ],
    'Nom': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],2','sub4','sub3','sub6','sub5']})
 print(pd.merge(left, right, on='subject_id', how='inner'))

Le résultat de l'exécution est le suivant :

      Nom_x  id_x  subject_id  Nom_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