Numérique et sciences informatiques (spécialité) · Première
Fusion de tables : cours de Première NSI
Publié le 6 novembre 2026 · Mis à jour le 6 novembre 2026 · Signaler une erreur
L'essentiel
- Fusionner deux tables, c'est associer les lignes de l'une à celles de l'autre grâce à une clé : une colonne de la première dont les valeurs correspondent à une colonne de la seconde.
- L'opération s'appelle une jointure. Elle sert à retrouver une information (le nom d'une capitale) qui n'est stockée que sous forme de numéro dans l'autre table 1.
- Une ligne sans correspondance disparaît d'une jointure interne ; elle est conservée, avec des cases vides, si on garde toute une table.
- Quand les deux tables ont des colonnes de même nom, un conflit apparaît 1 : on renomme les colonnes avant de fusionner.
- Méthode : identifier la clé, renommer, fusionner, ne garder que les colonnes utiles, vérifier le nombre de lignes obtenu.
Pourquoi fusionner deux tables ?
Dans le chapitre sur les tables, tu as appris à lire un fichier CSV, à rechercher une valeur et à trier des lignes. Tu travaillais alors sur une seule table à la fois. Or, dans la vie réelle, les données sont rarement rangées dans un seul tableau géant. On les répartit dans plusieurs tables, et on les relie quand on en a besoin.
Ce cours répond à une question simple : comment obtenir, en un seul tableau, des informations qui se trouvent dans deux tables différentes ?
Prenons le cas décrit dans le document d'Éduscol sur pandas. On dispose d'une table des villes et d'une table des pays. Côté pays, on ne lit pas le nom de la capitale : on y trouve seulement un code chiffré, qui reprend une valeur de la colonne id des villes 1. Pour afficher le nom de chaque capitale, il faut donc aller le chercher dans l'autre table. C'est exactement ce que fait une fusion de tables, appelée aussi jointure 1.
Pourquoi ne pas tout mettre dans une seule table dès le départ ? Imagine que tu écrives le nom complet de la capitale, sa population et ses coordonnées dans chaque ligne de la table des pays. Si la population change, tu devrais corriger plusieurs endroits. En stockant une seule fois chaque ville et en la désignant par un numéro, on évite les répétitions et les incohérences. La fusion permet ensuite de reconstituer le grand tableau quand on en a besoin.
Clé, correspondance et vocabulaire
Dans l'exemple du document d'Éduscol, la clé n'a pas le même nom dans les deux tables : c'est la colonne « capitale » côté pays et la colonne id côté villes 1. Ce n'est pas un problème : ce qui compte, c'est que les valeurs se correspondent, pas que les noms soient identiques.
Voici un petit jeu de données fictif, aux populations arrondies, que nous utiliserons dans tout le cours.
| id | nom | capitale |
|---|---|---|
| 1 | France | 10 |
| 2 | Italie | 11 |
| 3 | Espagne | 12 |
| id | nom | population |
|---|---|---|
| 10 | Paris | 2.1 |
| 11 | Rome | 2.8 |
| 12 | Madrid | 3.3 |
| 13 | Lyon | 0.5 |
Observe que la colonne capitale de la table des pays contient 10, 11 et 12. Ces nombres sont les valeurs de la colonne id de la table des villes. Lyon, de numéro 13, n'est la capitale d'aucun pays de notre table.
Fusionner à la main avec des listes de dictionnaires
En NSI, tu as vu qu'une table peut être représentée par une liste de dictionnaires : chaque dictionnaire est une ligne, les clés du dictionnaire sont les noms des colonnes. Écrivons nos deux tables ainsi.
pays = [
{"id": 1, "nom": "France", "capitale": 10},
{"id": 2, "nom": "Italie", "capitale": 11},
{"id": 3, "nom": "Espagne", "capitale": 12},
]
villes = [
{"id": 10, "nom": "Paris", "population": 2.1},
{"id": 11, "nom": "Rome", "population": 2.8},
{"id": 12, "nom": "Madrid", "population": 3.3},
{"id": 13, "nom": "Lyon", "population": 0.5},
]
Voici le code correspondant. Remarque le traitement des noms de champs : si un champ existe déjà dans la ligne de gauche, on ajoute _2 au champ de droite. Sans cela, le second dictionnaire écraserait silencieusement le premier.
def jointure(t1, t2, cle1, cle2):
resultat = []
for l1 in t1:
for l2 in t2:
if l1[cle1] == l2[cle2]:
ligne = dict(l1)
for champ, valeur in l2.items():
nom = champ if champ not in l1 else champ + "_2"
ligne[nom] = valeur
resultat.append(ligne)
return resultat
L'appel jointure(pays, villes, "capitale", "id") renvoie trois dictionnaires. Le premier est {"id": 1, "nom": "France", "capitale": 10, "id_2": 10, "nom_2": "Paris", "population": 2.1}.
Le coût de cet algorithme se compte facilement. Pour chaque ligne de la table de gauche, on parcourt toute la table de droite. Si la première table a lignes et la seconde lignes, on effectue comparaisons de clés. Dans notre exemple, comparaisons. Sur de grosses tables, ce nombre devient vite très grand, ce qui explique l'intérêt des bibliothèques optimisées.
Fusionner avec pandas
Les tables lues dans des fichiers CSV sont stockées par pandas sous forme de dataframes, que l'on peut voir comme un tableau 1. Pour jeter un œil à une table, on dispose de head(), qui affiche les premières lignes, et de sample(n), qui affiche n enregistrements pris au hasard 1. Ces deux méthodes sont utiles pour vérifier le contenu d'une table avant et après une fusion.
Pour fusionner deux dataframes, on utilise une méthode de jointure à laquelle on indique la colonne-clé de chaque table. Avec nos tables, que l'on suppose chargées dans les variables pays et villes :
resultat = pays.merge(villes, left_on="capitale", right_on="id")
Le paramètre left_on désigne la clé de la table de gauche, right_on celle de la table de droite. Si les deux colonnes portaient le même nom, un seul paramètre on suffirait.
Une autre idée du même document consiste à préparer la table à fusionner avant de la joindre, puis à ne garder qu'une partie des colonnes de l'autre table 1. C'est une bonne habitude : si tu n'as besoin que du nom de la capitale, sélectionne d'abord les colonnes id_ville et nom_ville, puis fusionne. Le résultat est plus lisible et plus léger.
Lignes sans correspondance et doublons de clé
Que se passe-t-il quand une valeur de clé n'existe que d'un côté ? Cela dépend du type de jointure. Reprenons l'exemple de Lyon : son numéro, 13, n'apparaît dans aucune capitale.
Il reste un cas qui surprend souvent : celui des doublons de clé. Imagine une table des villes contenant plusieurs villes pour un même pays, et une table des pays contenant ce pays une seule fois. Chaque ville trouvera sa correspondance, et le pays sera recopié autant de fois qu'il y a de villes. Le résultat peut donc avoir plus de lignes que chacune des deux tables.
Règle de calcul : si une valeur de clé apparaît fois à gauche et fois à droite, elle produit lignes dans une jointure interne.
Méthode complète et exemple rédigé
- Repérer la cléQuelle colonne de chaque table se correspond ?
- RenommerÉviter les colonnes de même nom.
- FusionnerChoisir le type de jointure.
- NettoyerGarder seulement les colonnes utiles.
- VérifierContrôler le nombre de lignes obtenu.
Une fois la table fusionnée, tu peux enchaîner avec les opérations des chapitres précédents. Tu peux trier par population décroissante pour trouver la capitale la plus peuplée, ou rechercher les pays dont la capitale dépasse 3 millions d'habitants. La fusion est souvent une étape intermédiaire, pas un but en soi.
Pièges et bonnes pratiques
Exercices corrigés
Exercice 1 Élèves et classes
Une table eleves contient 5 lignes ; la colonne classe vaut 1, 2, 1, 3, 9 (une valeur par élève). Une table classes contient 3 lignes, d'identifiants 1, 2 et 3, chaque identifiant apparaissant une seule fois.
On fusionne eleves et classes par une jointure interne, avec classe et id comme clés. Combien de lignes contient le résultat ?
Indice 1
Cherche les élèves dont la valeur de classe existe dans classes.
Indice 2
Une valeur sans correspondance disparaît d'une jointure interne.
Voir la correction pas à pas
Les valeurs 1, 2, 1 et 3 existent dans la table
classes. Ces quatre élèves ont une correspondance.La valeur 9 n'existe pas dans
classes. L'élève concerné n'a pas de correspondance.Chaque identifiant de
classesest unique, donc chaque élève avec correspondance donne exactement une ligne.Le résultat contient lignes.
Une jointure interne perd les lignes sans correspondance. Avec une jointure à gauche sur eleves, on aurait gardé 5 lignes.
Exercice 2 Villes et pays avec doublons
Une table villes a 7 lignes, avec une colonne pays_id valant 1, 1, 1, 2, 2, 3, 4. Une table pays a 3 lignes d'identifiants 1, 2 et 3, chacun une seule fois.
- Combien de lignes donne la jointure interne de
villes(gauche) etpays(droite) ? - Combien de lignes donnerait une jointure à gauche ?
Donne la réponse à la question 1 dans la case de réponse.
Indice 1
Compte combien de villes ont un pays_id présent dans pays.
Indice 2
Pour la question 2, une jointure à gauche garde toutes les lignes de villes.
Voir la correction pas à pas
Les valeurs 1, 1, 1, 2, 2, 3 existent dans
pays: cela fait 6 villes avec correspondance.La valeur 4 n'existe pas dans
pays: la ville correspondante n'a pas de correspondance.Chaque identifiant de
paysest unique, donc chaque ville avec correspondance donne une ligne : la jointure interne contient lignes.Question 2 : une jointure à gauche garde les 7 villes ; celle du pays 4 a des cases vides côté pays.
Quand la clé est unique d'un côté, le nombre de lignes de la jointure interne est le nombre de lignes de l'autre table qui trouvent leur correspondance.
Exercice 3 Coût de l'algorithme naïf
On utilise la fonction jointure(t1, t2, cle1, cle2) du cours avec une table t1 de 7 lignes et une table t2 de 3 lignes.
- Combien de comparaisons de clés la fonction effectue-t-elle ?
- Qu'obtient-on si on échange les deux tables ? Le nombre de comparaisons change-t-il ?
Donne la réponse à la question 1 dans la case de réponse.
Indice 1
Pour chaque ligne de t1, la boucle interne parcourt toute t2.
Indice 2
Un produit est commutatif.
Voir la correction pas à pas
La boucle externe s'exécute 7 fois, une fois par ligne de
t1.À chaque tour, la boucle interne compare la clé à celles des 3 lignes de
t2.Le nombre de comparaisons est .
Question 2 : en échangeant les tables, on obtient comparaisons. Le nombre est identique, mais les colonnes du résultat sont dans l'autre ordre.
Le coût du parcours double est le produit des tailles des deux tables. C'est pourquoi on évite cet algorithme sur de très grosses tables.
Quiz
8 questions · correction immédiate · ton score reste sur ton appareil.
-
La clé est la colonne qui sert à repérer les lignes qui se correspondent. Elle n'est pas forcément la colonne la plus variée ni liée au nom du fichier, et elle peut porter un nom différent dans chaque table.
-
Le numéro de capitale renvoie à l'identifiant
idde la ville. Le nom de la ville n'est pas utilisé comme clé, car il pourrait être ambigu ou écrit différemment d'une table à l'autre. -
La jointure interne compare les clés, rassemble les colonnes des deux tables et supprime les lignes sans correspondance. Le nombre de lignes du résultat n'est pas toujours celui de la table de gauche : il change si des clés sont absentes ou répétées.
-
Chaque ligne de gauche se combine avec chaque ligne de droite : . Additionner (5) est l'erreur tentante, mais chaque paire de lignes de même clé donne une ligne.
-
En Python,
"10" == 10est faux : un texte et un entier ne sont jamais égaux. L'ordre ou le nombre de colonnes n'a pas d'effet sur la comparaison des clés. -
Renommer les colonnes rend tous les noms distincts dans le résultat. Trier ne change pas les noms de colonnes, et fusionner deux fois ne résout rien.
-
C'est faux. Le nombre de lignes dépend des clés : des clés absentes d'un côté font disparaître des lignes, des clés répétées en créent davantage. Le compte n'est de 10 que si chaque clé apparaît une fois de chaque côté.
-
On compare chaque ligne de la première table à chaque ligne de la seconde : . Le résultat 9 (somme) serait celui d'un parcours séparé de chaque table, ce qui ne permet pas de croiser les clés.
Les questions qu'on se pose
Quelle différence y a-t-il entre fusionner et concaténer deux tables ?
Concaténer met les lignes d'une table à la suite de celles d'une autre, quand les deux ont les mêmes colonnes. Fusionner ajoute des colonnes : on associe chaque ligne de la première table à la ligne correspondante de la seconde grâce à une clé.
Comment choisir la bonne clé ?
Cherche, dans une table, une colonne qui contient des identifiants renvoyant à l'autre table (comme le numéro de capitale du cours 1). Préfère un identifiant unique à un nom, qui peut être répété ou écrit différemment.
À quoi sert la fusion de tables dans la vie réelle ?
Elle permet de croiser des données stockées séparément : associer des clients à leurs commandes, des élèves à leurs classes, des pays à leurs capitales. Elle évite de répéter les mêmes informations dans plusieurs endroits.
Pourquoi mon résultat a-t-il plus de lignes que chacune de mes tables ?
Probablement parce qu'une valeur de clé apparaît plusieurs fois des deux côtés. Une clé présente fois à gauche et fois à droite produit lignes. Vérifie l'unicité de la clé dans la table où elle devrait être unique.
Que faire si deux tables ont une colonne de même nom ?
Un conflit de champs apparaît 1. Renomme les colonnes d'une des tables avant de fusionner, par exemple nom en nom_ville, puis vérifie les noms du résultat avec head().
Sources
- RA_Lycee_G_NSI_trtd_pandas — Manipulation de tables avec pandas (fusion), Éduscol. Consulté le 6 novembre 2026.
- Fusion nucléaire, Wikipédia. Consulté le 6 novembre 2026.
- Tableau périodique des éléments, Wikipédia. Consulté le 6 novembre 2026.
Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.