Aller au contenu
Apprendre.
  • M1 · toutes les matières15 matières : Préparation de données, API & sécurité, CI/CD, Docker, Merise, Dataviz, KNIME, ML appliqué : projet LoL, SQL & UML, SQL avancé, Machine Learning, Git, IA frugale & responsable, Qualité des données, MathématiquesAnnée
  • M2 · toutes les matières4 matières : Deep Learning, AI Act, Comex & Fundraising, Gouvernance & DataMeshAnnée
  • Deep LearningM2 · 4 modules · Réseaux de neurones, CNN, texte, modèles génératifs.Matière
  • Préparation de donnéesM1 · 3 modules · Nettoyer, transformer et fusionner des données avec Python.Matière
  • API & sécuritéM1 · 2 modules · Consommer, concevoir et sécuriser des API.Matière
  • CI/CDM1 · 1 module · Intégration et livraison continues.Matière
  • DockerM1 · 3 modules · Conteneurs, images, volumes, réseaux, Compose.Matière
  • MeriseM1 · 2 modules · Modéliser une base : MCD, MLD, MPD.Matière
  • DatavizM1 · 2 modules · Visualiser pour comprendre et décider.Matière
  • KNIMEM1 · 1 module · Explorer et nettoyer des données en workflow.Matière
  • ML appliqué : projet LoLM1 · 2 modules · Du besoin métier au POC de vision par ordinateur.Matière
  • SQL & UMLM1 · 3 modules · Modèles UML et requêtes SQL.Matière
  • SQL avancéM1 · 3 modules · Jointures, fenêtres, CTE, optimisation.Matière
  • Machine LearningM1 · 3 modules · Régression, classification, segmentation, projet.Matière

↑↓ naviguer↵ ouvre le résultat en surbrillanceesc fermer

Partie 3 · Jointures

Joindre des tables : merge

Les données sont rarement dans une seule table. Une jointure aligne les lignes de deux tables grâce à une clé de jointure : des colonnes partagées, comme une clé primaire / clé étrangère en SQL. En pandas : pd.merge(gauche, droite, on='client_id', how='inner').

gauche : clients droite : commandes 1 · 2 · 31 · 2 · 2 · 4 clés communes : 1 et 2 (exemple ajouté)
howLignes conservéesSur l'exemple
innerclés présentes des deux côtésclés 1 et 2 (Alice, Bob avec leurs commandes)
lefttoutes celles de gauche ; NaN si pas de correspondance1, 2, 3 (Charlie sans commande)
righttoutes celles de droite1, 2, 4 (commande du client 4 sans nom)
outertoutes les lignes des deux tables1, 2, 3, 4

Une clé qui apparaît plusieurs fois à droite (client 2) donne plusieurs lignes dans le résultat. Paramètres : on (même nom des deux côtés), left_on / right_on (noms différents), suffixes (pour distinguer les colonnes homonymes non clés ; par défaut _x et _y).

Vérifie que tu as compris

Quelle jointure garde toutes les lignes de la table de gauche, avec des manquants si pas de correspondance ?

Vérifie que tu as compris

Les clés ont des noms différents dans les deux tables (client_id / id_client). Comment faire ?

Une jointure en Python pur

On indexe la table de droite par la clé (dictionnaire de listes), puis on parcourt la gauche :

from collections import defaultdict
par_client = defaultdict(list)
for c in commandes: par_client[c["client_id"]].append(c)

inner = []
for cl in clients:
    for cmd in par_client.get(cl["client_id"], []):
        inner.append({**cl, **cmd})        # fusion des deux dicts

Pour un left, on ajoute la ligne gauche seule (les champs de droite à None) quand la liste est vide.

À toi de coder

inner et left join à la main

Implémente deux jointures sur client_id : inner (uniquement les clients ayant des commandes) et gauche (tous les clients, produit et montant à None pour ceux sans commande). Le client 2 a deux commandes : il doit apparaître deux fois.

Ctrl/⌘+Entrée

Les suffixes

Quand les deux tables ont une colonne de même nom (hors clé), pandas ajoute _x (gauche) et _y (droite), personnalisables avec suffixes=('_client', '_details'). En Python pur, {**gauche, **droite} écrase silencieusement la colonne de gauche : il faut renommer soi-même.

Vérifie que tu as compris

Que se passe-t-il avec {**a, **b} si a et b ont tous deux une clé « ville » ?