Fusionner les Pandas DataFrames sur l'index

Manav Narula 27 décembre 2020
  1. Utiliser merge() pour combiner deux DataFrames de Pandas sur l’index
  2. Utilisez join() pour combiner deux DataFrames de Pandas sur l’index
Fusionner les Pandas DataFrames sur l'index

Dans le monde de la science des données et de l’apprentissage automatique, il est essentiel de maîtriser les opérations d’organisation, de maintenance et de nettoyage des données pour une analyse plus approfondie. La fusion de deux DataFrames est un exemple d’une telle opération. Il s’avère qu’il est facile de combiner deux DataFrames en utilisant la bibliothèque Pandas en Python.

Pandas nous fournit deux fonctions utiles, merge() et join() pour combiner deux DataFrames. Ces deux méthodes sont très similaires mais merge() est considérée comme plus polyvalente et plus souple. Elle fournit également de nombreux paramètres pour modifier le comportement de la DataFrame finale. La méthode join() combine les deux DataFrames sur leurs index, tandis que merge() nous permet de spécifier les colonnes qui peuvent servir de clé pour fusionner deux DataFrames.

Un paramètre commun à ces deux fonctions, qu’il faut connaître, est le how, qui définit le type de jointure. Par défaut, le paramètre how est inner pour merge() et left pour join(), mais pour les deux, il peut être changé en left, right, inner, et outer. Il est essentiel de connaître la différence entre les deux.

En combinant deux Pandas DataFrames, nous supposons que l’un est le DataFrame de gauche et l’autre le DataFrame de droite. Les deux merge() et join() correspondent aux enregistrements des colonnes clés. La jointure inner retourne un DataFrame d’enregistrements qui correspondent dans les deux DataFrames. La jointure out produit un DataFrame fusionné avec tous les éléments des deux DataFrames, en remplissant le NaN pour les valeurs manquantes des deux côtés. La jointure left contient tous les éléments de la DataFrame gauche mais seulement les enregistrements correspondants de la DataFrame droite. L’opposé de left est right, qui contient tous les éléments du DataFrame de droite et seulement les enregistrements correspondants du DataFrame de gauche. Tout ceci sera plus clair dans l’exemple de code dans les sections suivantes où nous combinerons les DataFrames dans le code ci-dessous :

import pandas as pd
import numpy as np

df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
    ["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)

print(df1)
print(df2)

Production :

  C1
1  a
2  b
4  d
5  e
7  h
   C2
1  AA
2  BB
3  CC
5  EE
6  FF

Utiliser merge() pour combiner deux DataFrames de Pandas sur l’index

Lors de la fusion de deux DataFrames sur l’index, la valeur des paramètres left_index et right_index de la fonction merge() doit être True. L’exemple de code suivant combinera deux DataFrames avec inner comme type de jointure :

import pandas as pd
import numpy as np

df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
    ["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)

df_inner = df1.merge(df2, how="inner", left_index=True, right_index=True)

print(df_inner)

Production :

  C1  C2
1  a  AA
2  b  BB
5  e  EE

Le code suivant fusionnera les DataFrames avec le type de jointure outer :

import pandas as pd
import numpy as np

df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
    ["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)

df_outer = df1.merge(df2, how="outer", left_index=True, right_index=True)

print(df_outer)

Production :

    C1   C2
1    a   AA
2    b   BB
3  NaN   CC
4    d  NaN
5    e   EE
6  NaN   FF
7    h  NaN

Comme vous pouvez le voir, le DataFrame fusionné avec le type de jointure inner n’a que les enregistrements correspondants des deux DataFrames, alors que celui avec la jointure out a tous les éléments présents en lui, remplissant les enregistrements manquants avec NaN. Maintenant, en utilisant la jointure left :

import pandas as pd
import numpy as np

df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
    ["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)

df_left = df1.merge(df2, how="left", left_index=True, right_index=True)

print(df_left)

Production :

  C1   C2
1  a   AA
2  b   BB
4  d  NaN
5  e   EE
7  h  NaN

La DataFrame fusionnée ci-dessus contient tous les éléments de la DataFrame de gauche, et seulement les enregistrements correspondants de la DataFrame de droite. Son opposé exact est la jointure right, comme indiqué ci-dessous :

import pandas as pd
import numpy as np

df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
    ["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)

df_right = df1.merge(df2, how="right", left_index=True, right_index=True)

print(df_right)

Production :

    C1  C2
1    a  AA
2    b  BB
3  NaN  CC
5    e  EE
6  NaN  FF

Utilisez join() pour combiner deux DataFrames de Pandas sur l’index

La méthode join() combine les deux DataFrames en fonction de leurs index, et par défaut, le type de jointure est left. Elle utilise toujours l’index du DataFrame de droite, mais nous pouvons mentionner la clé du DataFrame de gauche. Nous pouvons spécifier les types de jointure pour la fonction join() de la même manière que nous le faisons pour la fonction merge().

L’exemple suivant montre une DataFrame fusionnée avec un type de jointure outer :

import pandas as pd
import numpy as np

df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
    ["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_outer = df1.join(df2, how="outer")
print(df_outer)

Production :

    C1   C2
1    a   AA
2    b   BB
3  NaN   CC
4    d  NaN
5    e   EE
6  NaN   FF
7    h  NaN
Auteur: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Article connexe - Pandas DataFrame