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
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
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
- Correspondance avec SQL : how="inner" ↔ INNER JOIN, "left" ↔ LEFT JOIN, "right" ↔ RIGHT JOIN, "outer" ↔ FULL OUTER JOIN, "cross" ↔ CROSS JOIN.
- 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.
- 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.
- 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.
- pd.concat([df1, df2]) empile des tableaux de même structure : c'est l'équivalent de UNION ALL, pas d'une jointure.
Voir aussi
- pandas — groupby et agrégationgroupby découpe un tableau par catégorie puis agrège chaque groupe, exactement comme GROUP BY en SQL. On s'en sert pour un CA par ville, une moyenne par classe ou un nombre de connexions par jour.
- pandas — valeurs manquantesLes valeurs manquantes (NaN, None, NaT) faussent comptages et moyennes si on les ignore : isna les repère, fillna les remplace, dropna les écarte. Décidez au cas par cas, colonne par colonne.
- pandas — filtrer et sélectionnerUn masque booléen filtre les lignes d'un DataFrame, loc sélectionne par étiquette et iloc par position ; query offre une écriture proche du WHERE de SQL. C'est l'étape qui précède toute analyse.