Aller au contenu
Data (pandas / numpy)

pandas — merge (jointures)

merge relie deux DataFrame sur une colonne commune, comme un JOIN en SQL, et how choisit inner, left, right ou outer. On s'en sert pour enrichir des ventes avec les données clients ou produits.

  • merge
  • jointure
  • JOIN
  • how
  • left
  • inner
  • outer
  • concat

Syntaxe

Modèle
pd.merge(gauche, droite, on="cle", how="inner")    # inner, left, right, outer, crossgauche.merge(droite, left_on="id_client", right_on="id", how="left",             validate="many_to_one", indicator=True)

Exemple

Exemple concret
import pandas as pdcommandes = pd.DataFrame({    "id_commande": [1, 2, 3, 4],    "id_client": [10, 11, 10, 99],    "montant": [120, 80, 45, 60],})clients = pd.DataFrame({"id_client": [10, 11, 12], "nom": ["Ana", "Bob", "Chloé"]})inner = commandes.merge(clients, on="id_client", how="inner")print(len(inner))                              # → 3left = commandes.merge(clients, on="id_client", how="left", validate="many_to_one")print(left["nom"].tolist())                    # → ['Ana', 'Bob', 'Ana', nan]outer = commandes.merge(clients, on="id_client", how="outer", indicator=True)print(outer["_merge"].astype(str).tolist())# → ['both', 'both', 'both', 'right_only', 'left_only']

À retenir

  1. Correspondance avec SQL : how="inner" ↔ INNER JOIN, "left" ↔ LEFT JOIN, "right" ↔ RIGHT JOIN, "outer" ↔ FULL OUTER JOIN, "cross" ↔ CROSS JOIN.
  2. Piège : une clé en double dans la table de droite multiplie les lignes de gauche et gonfle les totaux. validate="many_to_one" lève une erreur si la table de référence contient des doublons.
  3. indicator=True ajoute la colonne _merge (both, left_only, right_only) : c'est le moyen le plus simple de trouver les commandes sans client connu.
  4. Piège : des clés de types différents (10 contre "10") ne se rejoignent jamais. Alignez les types avec astype avant le merge ; si les noms de colonnes diffèrent, utilisez left_on et right_on.
  5. pd.concat([df1, df2]) empile des tableaux de même structure : c'est l'équivalent de UNION ALL, pas d'une jointure.

Voir aussi