Fusion de deux tables avec Python
Pourquoi fusionner des tables ? Les données sont souvent réparties dans plusieurs tableaux. Par exemple, une table contenant des personnes, une autre les villes où elles vivent et une dernière avec les matières qu’elles étudient.
La fusion consiste à construire une nouvelle table en combinant les données de deux tables. On dispose de nombreux outils pour le faire (voir la modélisation avec Power BI). Ici, nous nous plaçons à un niveau de première générale avec utilisation de Python.
Principe
Table 1 : personnes
| Nom | Ville |
| Alice | Paris |
| Bob | Lyon |
| Chloé | Paris |
Table 2 : villes
| Ville | Région |
| Paris | Île-de-France |
| Lyon | Auvergne-Rhône-Alpes |
Après fusion :
| Nom | Ville | Région |
| Alice | Paris | Île-de-France |
| Bob | Lyon | Auvergne-Rhône-Alpes |
| Chloé | Paris | Île-de-France |
La nouvelle table contient les informations des deux tables.
Pour fusionner deux tables, il faut une colonne commune. Ici, c’est Ville. Les valeurs possibles de cette colonne forment un domaine de valeurs : Paris, Lyon, etc.

Une fusion fonctionne correctement seulement si les deux tables utilisent le même domaine de valeurs.
Avec Python
Comment fonctionne l’algorithme ?
- On parcourt chaque personne.
- On parcourt chaque ville.
- On compare les valeurs de la colonne commune Ville.
- Quand elles sont égales, on crée une nouvelle ligne.
- On ajoute cette ligne à la table résultat.
Piège classique : si une ville n’existe pas dans la seconde table, aucune ligne ne sera créée.
En Python, on peut réaliser une fusion avec des boucles et des listes de dictionnaires.
Exemple
Imaginons que l'on dispose de deux tables.
Table des élèves
| Nom | Classe |
| Alice | 1G1 |
| Bob | 1G2 |
| Chloé | 1G1 |
En Python :
eleves = [
{"Nom": "Alice", "Classe": "1G1"},
{"Nom": "Bob", "Classe": "1G2"},
{"Nom": "Chloé", "Classe": "1G1"}
]
Table des classes
| Classe | Salle |
| 1G1 | B12 |
| 1G2 | C03 |
En Python :
classes = [
{"Classe": "1G1", "Salle": "B12"},
{"Classe": "1G2", "Salle": "C03"}
]
Objectif : construire une nouvelle table contenant...
| Nom | Classe | Salle |
| Alice | 1G1 | B12 |
| Bob | 1G2 | C03 |
| Chloé | 1G1 | B12 |
Pour cela, on utilise la colonne commune Classe.
Fonction :
def fusion(eleves, classes):
resultat = []
for eleve in eleves:
for classe in classes:
if eleve["Classe"] == classe["Classe"]:
ligne = {
"Nom": eleve["Nom"],
"Classe": eleve["Classe"],
"Salle": classe["Salle"]
}
resultat.append(ligne)
return resultat
Utilisation de la fonction :
table_fusionnee = fusion(eleves, classes)
for ligne in table_fusionnee:
print(ligne)
Affichage :
{'Nom': 'Alice', 'Classe': '1G1', 'Salle': 'B12'}
{'Nom': 'Bob', 'Classe': '1G2', 'Salle': 'C03'}
{'Nom': 'Chloé', 'Classe': '1G1', 'Salle': 'B12'}
