Aller au contenu

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.

Table pays (données fictives)
idnomcapitale
1France10
2Italie11
3Espagne12
Table pays (données fictives) · La colonne capitale contient des numéros de villes.
Table villes (population en millions, arrondie, fictive)
idnompopulation
10Paris2.1
11Rome2.8
12Madrid3.3
13Lyon0.5
Table villes (population en millions, arrondie, fictive) · La colonne id est la clé côté villes.

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 nn lignes et la seconde mm lignes, on effectue n×mn \times m comparaisons de clés. Dans notre exemple, 3×4=123 \times 4 = 12 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 aa fois à gauche et bb fois à droite, elle produit a×ba \times b lignes dans une jointure interne.

Méthode complète et exemple rédigé

Les étapes d'une fusionÉtapes successives : repérer la clé, renommer, fusionner, nettoyer, vérifier1Repérer la cléQuelle colonne de chaque table se correspond ?2RenommerÉviter les colonnes de même nom.3FusionnerChoisir le type de jointure.4NettoyerGarder seulement les colonnes utiles.5VérifierContrôler le nombre de lignes obtenu.
  1. Repérer la cléQuelle colonne de chaque table se correspond ?
  2. RenommerÉviter les colonnes de même nom.
  3. FusionnerChoisir le type de jointure.
  4. NettoyerGarder seulement les colonnes utiles.
  5. VérifierContrôler le nombre de lignes obtenu.
Les étapes d'une fusion

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

★☆☆Environ 8 min

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
  1. Les valeurs 1, 2, 1 et 3 existent dans la table classes. Ces quatre élèves ont une correspondance.

  2. La valeur 9 n'existe pas dans classes. L'élève concerné n'a pas de correspondance.

  3. Chaque identifiant de classes est unique, donc chaque élève avec correspondance donne exactement une ligne.

  4. Le résultat contient 5−1=45 - 1 = 4 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

★★☆Environ 12 min

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.

  1. Combien de lignes donne la jointure interne de villes (gauche) et pays (droite) ?
  2. 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
  1. Les valeurs 1, 1, 1, 2, 2, 3 existent dans pays : cela fait 6 villes avec correspondance.

  2. La valeur 4 n'existe pas dans pays : la ville correspondante n'a pas de correspondance.

  3. Chaque identifiant de pays est unique, donc chaque ville avec correspondance donne une ligne : la jointure interne contient 7−1=67 - 1 = 6 lignes.

  4. 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

★★★Environ 15 min

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.

  1. Combien de comparaisons de clés la fonction effectue-t-elle ?
  2. 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
  1. La boucle externe s'exécute 7 fois, une fois par ligne de t1.

  2. À chaque tour, la boucle interne compare la clé à celles des 3 lignes de t2.

  3. Le nombre de comparaisons est 7×3=217 \times 3 = 21.

  4. Question 2 : en échangeant les tables, on obtient 3×7=213 \times 7 = 21 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.

  1. Qu'appelle-t-on la clé de jointure ?

  2. Dans le cours, la table des pays contient un numéro de capitale. À quel champ de la table des villes ce numéro correspond-il ?

  3. Quelle(s) affirmation(s) sur une jointure interne est (sont) correcte(s) ?

    Plusieurs réponses possibles.

  4. Une clé apparaît 3 fois dans la table de gauche et 2 fois dans la table de droite. Combien de lignes produit-elle dans une jointure interne ?

  5. Une jointure entre deux tables renvoie zéro ligne alors que les valeurs semblent identiques à l'écran. Quelle est la cause la plus probable ?

  6. Quand les deux tables ont toutes deux une colonne nom, il peut y avoir un conflit de champs. Quelle précaution simple permet de l'éviter ?

  7. Vrai ou faux : en fusionnant deux tables de 10 lignes, on obtient toujours 10 lignes.

  8. Avec l'algorithme naïf à deux boucles imbriquées, combien de comparaisons de clés faut-il pour une table de 4 lignes et une table de 5 lignes ?

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 aa fois à gauche et bb fois à droite produit a×ba \times b 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

  1. RA_Lycee_G_NSI_trtd_pandas — Manipulation de tables avec pandas (fusion), Éduscol. Consulté le 6 novembre 2026.
  2. Fusion nucléaire, Wikipédia. Consulté le 6 novembre 2026.
  3. 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.

Signaler une erreur sur cette page

Je suis en…

Primaire

  • CP Bientôt
  • CE1 Bientôt
  • CE2 Bientôt
  • CM1 Bientôt
  • CM2 Bientôt

Collège

Lycée

Supérieur

  • BTS Bientôt
  • BUT Bientôt
  • Licence Bientôt
  • Prépas Bientôt

Sur cette page