Fusionner les Pandas DataFrames sur l'index
-
Utiliser
merge()
pour combiner deux DataFrames de Pandas sur l’index -
Utilisez
join()
pour combiner deux DataFrames de Pandas 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
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.
LinkedInArticle connexe - Pandas DataFrame
- Comment obtenir les en-têtes de colonne de Pandas DataFrame sous forme de liste
- Comment supprimer une colonne de Pandas DataFrame
- Comment convertir la colonne DataFrame en date-heure dans Pandas
- Comment convertir un float en un entier dans Pandas DataFrame
- Comment trier le DataFrame de Pandas par les valeurs d'une colonne
- Comment obtenir l'agrégat des Pandas par groupe et par somme