Python : Fusionner des DataFrames avec Pandas et sa méthode merge()

python pandas merge, pandas merge, fusionner dataframes pandas, jointure dataframes pandas, combiner données pandas, méthode merge pandas,

La méthode merge() de Pandas permet de combiner des DataFrames en fonction de leurs valeurs communes dans une ou plusieurs colonnes clés. Cette opération est similaire à une jointure SQL, mais avec une syntaxe plus simple et plus flexible (c’est python quand-même :p ).

Selon la façon dont vous spécifiez les paramètres, vous pouvez obtenir différents types de jointures, telles que des jointures internes, externes, gauches ou droites.

Syntaxe de base

Voici la syntaxe de base de la méthode merge() :

pandas.DataFrame.merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)

Bien qu’il y ait de nombreux paramètres, nous nous concentrerons sur les plus importants :

  • right : Le DataFrame avec lequel fusionner.
  • how : Le type de jointure à effectuer (‘left‘, ‘right‘, ‘outer‘, ‘inner‘).
  • on : Les colonnes à utiliser comme clés de fusion.
  • left_on et right_on : Les colonnes spécifiques à utiliser comme clés de fusion pour les DataFrames gauche et droit, respectivement.

Exemples d’utilisation

Commençons par un exemple simple où nous fusionnons deux DataFrames sur une seule clé :

import pandas as pd

# Créer deux DataFrames
df1 = pd.DataFrame({'id': [1, 2, 3], 'nom': ['Alice', 'Bob', 'Charlie']})
df2 = pd.DataFrame({'id': [2, 3, 4], 'age': [25, 30, 35]})

# Fusionner les DataFrames sur la colonne 'id'
df_merged = pd.merge(df1, df2, on='id', how='inner')

print(df_merged)

Cet exemple produit un nouveau DataFrame : df_merged avec les colonnes id, nom et age, contenant uniquement les lignes où les valeurs de id correspondent dans les deux DataFrames.

Vous pouvez également fusionner sur plusieurs clés en utilisant une liste pour le paramètre on :

df3 = pd.DataFrame({'id': [1, 2, 3], 'nom': ['Alice', 'Bob', 'Charlie'], 'ville': ['New York', 'Paris', 'Londres']})
df4 = pd.DataFrame({'id': [2, 3, 4], 'age': [25, 30, 35], 'ville': ['Paris', 'Londres', 'Berlin']})

df_merged = pd.merge(df3, df4, on=['id', 'ville'], how='inner')

print(df_merged)

Dans cet exemple, nous fusionnons df3 et df4 sur les colonnes id et ville en utilisant une jointure interne.

Types de jointures

Pandas offre différents types de jointures que vous pouvez spécifier avec le paramètre how :

  • 'inner' (par défaut) : Renvoie les lignes où les clés correspondent dans les deux DataFrames.
  • 'left' : Retourne toutes les lignes du DataFrame de gauche, ainsi que les lignes correspondantes du DataFrame de droite.
  • 'right' : Renvoie toutes les lignes du DataFrame de droite, ainsi que les lignes correspondantes du DataFrame de gauche.
  • 'outer' : Retourne toutes les lignes des deux DataFrames, en remplissant les valeurs manquantes avec NaN.

Voici un exemple de jointure externe :

df_merged = pd.merge(df1, df2, on='id', how='outer')

print(df_merged)

Cet exemple produit un nouveau DataFrame contenant toutes les lignes des deux DataFrames d’origine, avec des valeurs NaN pour les lignes où les clés ne correspondent pas.

Gestion des noms de colonnes en double

Lorsque vous fusionnez des DataFrames, il est possible que certaines colonnes aient les mêmes noms. Dans ce cas, Pandas ajoute automatiquement des suffixes pour les différencier. Vous pouvez personnaliser ces suffixes en utilisant le paramètre suffixes.

Exemple

Imaginons que nous ayons deux DataFrames représentant des données d’employés et de départements. Nous voulons les fusionner pour obtenir des informations complètes sur chaque employé et son département respectif.

import pandas as pd

# DataFrame des employés
employes = pd.DataFrame({'id_employe': [1, 2, 3, 4],
                         'nom': ['Alice', 'Bob', 'Charlie', 'David'],
                         'age': [28, 32, 45, 37]})

# DataFrame des départements
departements = pd.DataFrame({'id_departement': [1, 2, 3],
                             'nom': ['Ventes', 'Marketing', 'RH'],
                             'responsable': ['Alice', 'Bob', 'Charlie']})

print("DataFrame des employés :")
print(employes)
print("\nDataFrame des départements :")
print(departements)

Les deux DataFrames ont une colonne nommée “nom“. Lors de la fusion, Pandas ajoutera automatiquement des suffixes pour éviter les conflits de noms.

# Fusion des DataFrames
employes_departements = pd.merge(employes, departements, left_on='nom', right_on='responsable', how='left')

print("\nDataFrame fusionné avec les noms de colonnes en double :")
print(employes_departements)

Comme nous pouvons le voir, Pandas a ajouté les suffixes _x et _y aux colonnes “nom” pour les différencier. Cependant, ces suffixes par défaut ne sont pas très explicites.

Nous pouvons donc utiliser le paramètre suffixes pour spécifier des suffixes plus clairs :

employes_departements = pd.merge(employes, departements, left_on='nom', right_on='responsable', how='left', suffixes=('_employe', '_departement'))

print("\nDataFrame fusionné avec des noms de colonnes personnalisés :")
print(employes_departements)

Ici, nous avons utilisé les suffixes '_employe' et '_departement' pour différencier clairement les colonnes “nom” provenant des deux DataFrames d’origine.

Lire aussi :