Données en tables

Importer un CSV, contrôler ses valeurs, filtrer et trier des lignes, puis combiner deux tables en vérifiant les clés de rapprochement.

Environ 35 minutes

  • Importer des données CSV
  • Formuler un critère de sélection
  • Contrôler cohérence et doublons
  • Trier et fusionner des tables
Sommaire
  1. 1. Colonnes, lignes et types
  2. 2. Rechercher avec des critères explicites
  3. 3. Cohérence, doublons et tri
  4. 4. Combiner deux tables sur une clé
  5. 5. Raisonner sur la chaîne de traitement

Une table contient-elle déjà des informations fiables ?

Un fichier de relevés peut sembler bien rangé et contenir pourtant des nombres lus comme du texte, des identifiants répétés ou des valeurs impossibles. Le traitement commence donc par la compréhension des colonnes et le contrôle des données. Nous représenterons une table par un tableau de dictionnaires partageant les mêmes clés. Les exemples utilisent des relevés de stations fictives ; ils permettent de suivre toute la chaîne, de l’import à une nouvelle table enrichie.

1. Colonnes, lignes et types

Une table organise des objets de même nature. Chaque ligne décrit un objet ; chaque colonne correspond à un descripteur, par exemple id, site ou mesure. Les lignes peuvent avoir des valeurs différentes tout en partageant le même ensemble de descripteurs. Un dictionnaire représente une ligne ; un tableau de ces dictionnaires représente la table. Lire table[0]["mesure"] sélectionne la première ligne puis son champ mesure. Le premier accès utilise un indice et le second une clé.

Les trois lignes ont les mêmes descripteurs, mais chaque identifiant désigne un relevé distinct.

Le domaine de valeurs d’une colonne précise ce qu’elle peut contenir. Une mesure entière n’est pas une chaîne de caractères ; un code de station peut être une chaîne même s’il ne contient que des chiffres. Convertir un code comme "007" en entier ferait perdre ses zéros initiaux. Le type se choisit d’après le sens de la donnée, non d’après son apparence. Il faut également distinguer une valeur nulle et une valeur manquante : une absence de relevé ne mesure pas zéro.

Le format CSV est un format texte tabulaire : les champs d’une ligne sont séparés par un caractère convenu, souvent une virgule ou un point-virgule. Une première ligne peut nommer les colonnes. Le séparateur et l’encodage doivent être connus à l’import. Des guillemets permettent de protéger un champ contenant lui-même un séparateur. Un simple découpage à chaque virgule ne suffit donc pas pour tous les fichiers ; le module csv connaît ces règles.

Exemple résolu

Le texte CSV contient les lignes id ;mesure, puis R1 ;12 et R2 ;7. Comment obtenir deux dictionnaires dont les mesures sont des entiers ?

  1. Étape 1 : Importer le module, puis ouvrir le fichier en lecture avec l’encodage annoncé.import csv
  2. Étape 2 : Dans le contexte d’ouverture du fichier f, construire le lecteur de lignes nommées.lecteur = csv.DictReader(f, delimiter=";")
  3. Étape 3 : Convertir uniquement la mesure lors de la construction du tableau.table = [{"id": r["id"], "mesure": int(r["mesure"])} for r in lecteur]
  4. Étape 4 : L’ouverture recommandée s’écrit avec open et les arguments encoding="utf-8" et newline="". Le bloc with ferme le fichier à sa sortie. La conversion int suppose des champs remplis et convertibles ; on doit signaler toute ligne qui ne respecte pas cette condition.

Résultat : La table est [{"id" : "R1", "mesure" : 12}, {"id" : "R2", "mesure" : 7}]. Les identifiants restent des chaînes.

Piège à éviter : CSV ne déduit pas le type métier : conserver "12" comme texte changerait le sens de certaines comparaisons.

2. Rechercher avec des critères explicites

Rechercher dans une table consiste à sélectionner les lignes qui vérifient une condition. Pour garder les relevés du Nord d’au moins 13 unités, on combine deux tests avec and. Chaque test porte sur la ligne courante. Une compréhension produit un tableau de résultats sans modifier l’ordre des lignes conservées. Le résultat peut être vide, contenir une seule ligne ou en contenir plusieurs ; il ne faut pas supposer qu’un critère ordinaire fournit un objet unique.

La différence entre and et or est essentielle. Avec and, toutes les conditions doivent être vraies. Avec or, une seule suffit. Les parenthèses rendent le regroupement explicite lorsqu’on mélange plusieurs opérateurs. Une borne « au moins » inclut l’égalité ; une borne « strictement supérieur » l’exclut. Avant de programmer, reformule le critère avec des mots et vérifie une ligne qui doit être retenue, puis une ligne qui doit être rejetée.

Exemple résolu

Dans la table de la figure, sélectionne les relevés du Nord dont la mesure est au moins 13, puis donne seulement leurs identifiants.

  1. Étape 1 : Associer le test de site et le seuil inclusif.choix = [r for r in table if r["site"] == "Nord" and r["mesure"] >= 13]
  2. Étape 2 : R1 est au Nord mais sa mesure 12 est trop petite. R2 est au Sud. R3 est au Nord et sa mesure 15 satisfait le seuil.
  3. Étape 3 : Extraire le champ demandé après la sélection.identifiants = [r["id"] for r in choix]

Résultat : Le tableau des identifiants contient seulement ["R3"].

Piège à éviter : Remplacer and par or conserverait aussi R1, puisque son site est Nord, même si sa mesure est inférieure au seuil.

À toi d'essayer

Dans la table de la figure, conserve les lignes du Sud ou celles dont la mesure est strictement inférieure à 13. Donne les identifiants et explique chaque choix.

Voir la réponse

R1 est retenu car 12 est inférieur à 13. R2 est retenu à la fois par son site Sud et sa mesure 7. R3 ne vérifie aucune des deux conditions. Le résultat comporte R1 et R2, chacun une seule fois.

3. Cohérence, doublons et tri

Un contrôle de cohérence confronte les données à des règles annoncées : mesure convertible en entier, identifiant présent, site dans l’ensemble autorisé, valeur dans l’intervalle attendu. Une valeur inhabituelle n’est pas forcément fausse ; on ne la corrige pas en devinant. On conserve la trace du problème et on demande une vérification de la source. Une opération automatique doit distinguer une donnée absente d’une donnée valide, même si les deux situations empêchent un calcul immédiat.

Deux lignes identiques constituent un doublon de ligne. Deux lignes ayant le même identifiant mais des mesures différentes constituent un conflit si cet identifiant doit être unique. Pour rechercher un doublon de clé, on peut mémoriser les identifiants déjà rencontrés et signaler chaque nouvelle occurrence. La règle d’identité doit être choisie avant le contrôle. Deux relevés ayant la même mesure ne sont pas pour autant le même relevé ; supprimer l’un d’eux ferait perdre de l’information.

Trier une table selon une colonne réordonne les lignes entières ; il ne faut jamais trier une colonne seule en laissant les autres immobiles. En Python, sorted(table, key=lambda r: r["mesure"]) construit un nouveau tableau classé par mesure croissante. L’expression lambda indique ici quelle valeur comparer pour chaque ligne. Les mesures doivent être numériques avant le tri : dans un classement textuel, "12" se place avant "7", car leurs caractères sont comparés. Les identifiants continuent d’accompagner leur mesure.

À toi d'essayer

Une table contient {"id" : "A", "valeur" : 8} et {"id" : "B", "valeur" : 8}. Un programme supprime la deuxième ligne parce que les valeurs sont égales. Sa règle de suppression est-elle justifiée si id doit identifier chaque observation ?

Correction détaillée pas à pasDans ce chapitre : 2 corrections détaillées.

4. Combiner deux tables sur une clé

Une fusion par clé rapproche des lignes qui décrivent un même objet sous des aspects différents. Une table donne les mesures par code de station ; une autre donne le nom de chaque station. Le code commun permet de réunir ces informations. Rapprocher les premières lignes entre elles uniquement parce qu’elles occupent la même position est incorrect : l’ordre des deux tables peut différer. Le domaine de la clé doit être compatible : une chaîne "2" et l’entier 2 ne sont pas égaux en Python.

La fusion suit le code de station, même lorsque les lignes des deux tables sont inversées.

Une stratégie simple parcourt les lignes de la première table, puis celles de la seconde, et garde les couples dont les clés coïncident. Pour n et m lignes, elle peut effectuer n × m comparaisons. On définit ensuite le traitement des clés sans correspondance. Dans une fusion interne, seules les correspondances sont conservées. Si la deuxième table répète une clé, une ligne de la première peut produire plusieurs lignes finales : l’unicité des clés est donc un contrôle déterminant.

Exemple résolu

Mesures contient A avec 12 et B avec 7. Stations contient B avec Sud et A avec Nord. Construis la fusion interne sur code et indique le résultat.

  1. Étape 1 : Prendre la ligne A, 12 et chercher la station dont le code est A : c’est la deuxième ligne de Stations, nommée Nord.
  2. Étape 2 : Construire un nouvel enregistrement réunissant code A, valeur 12 et nom Nord, sans confondre valeur et nom.
  3. Étape 3 : Prendre la ligne B, 7 ; la première ligne de Stations donne le nom Sud. Les deux clés ont une correspondance unique.

Résultat : Le résultat contient {"code" : "A", "valeur" : 12, "nom" : "Nord"} et {"code" : "B", "valeur" : 7, "nom" : "Sud"}.

Piège à éviter : Associer les lignes par leur position attribuerait Sud à A et Nord à B, ce qui inverserait les informations.

À toi d'essayer

La table Stations contient deux lignes de code A et une ligne de code B. Mesures contient un relevé A et un relevé C. Combien de lignes produit une fusion interne conservant toutes les correspondances ? Quel contrôle préalable aurait signalé la difficulté ?

Correction détaillée pas à pasDans ce chapitre : 2 corrections détaillées.

5. Raisonner sur la chaîne de traitement

Au bac : expliquer un traitement de table

  1. Nommer les descripteurs et les types avant d’interpréter le code.
  2. Suivre une ligne conservée et une ligne exclue pour expliquer le filtre.
  3. Donner la colonne de tri, le sens du classement et le nombre de lignes obtenu.
  4. Pour une fusion, annoncer la clé, vérifier son domaine et compter toutes les correspondances. La spécialité poursuivie en terminale réutilise les acquis de première ; il ne s’agit pas ici d’une épreuve nationale anticipée de NSI.
Attention :

Erreurs fréquentes : comparer des nombres encore stockés en chaînes ; confondre une observation répétée et une valeur répétée ; trier une colonne isolée ; remplacer une donnée manquante par zéro ; fusionner par position. Un résultat bien présenté peut rester faux si ces décisions n’ont pas été vérifiées.

Vocabulaire

Descripteur :
Nom d’une colonne précisant la propriété observée.
Filtre :
Condition qui décide si une ligne est conservée.
Clé de rapprochement :
Champ ou groupe de champs utilisé pour associer deux lignes.
Domaine de valeurs :
Ensemble des valeurs admissibles pour un champ.

Bilan

QuestionRepère
ImporterLire le format, puis convertir selon le sens.
ContrôlerVérifier les domaines et la règle d’identité.
CombinerUtiliser une clé commune et compter les correspondances.

Retrouve la rubrique S’entraîner à l’adresse /exercices. Pour réviser, commence par un petit fichier lisible à la main : prévois le résultat du filtre et de la fusion, puis confronte-le à l’exécution.

À retenir

  • Une table regroupe des lignes partageant les mêmes descripteurs.
  • Le lecteur CSV fournit des champs textuels avant conversion.
  • Un filtre combine des conditions portant sur chaque ligne.
  • Trier une table déplace les lignes entières.
  • Une fusion interne conserve les couples de lignes dont les clés correspondent.

Fiche de révision

Avant de calculer

identifier le séparateur, l’encodage et les types voulus.

Avant de supprimer

distinguer égalité de valeurs, doublon exact et conflit de clé.

Avant de fusionner

contrôler les clés absentes ou répétées ; un ordre commun des lignes n’est pas nécessaire.

Questions fréquentes

Une fusion conserve-t-elle toujours le nombre de lignes ?

Non. Une clé absente peut retirer une correspondance ; une clé répétée peut en créer plusieurs. Le nombre de lignes dépend des données et de la règle de fusion.

Et maintenant ?

Tu as lu le cours. L’étape suivante tient en une action.

Relis le coursLes exercices de ce chapitre arrivent bientôt.

Prolonge l’expérience !

Continue à explorer ce chapitre à travers de nouvelles activités, des défis et des expériences interactives. Avec Premium, l’apprentissage continue !

Ici, tu débloques aussi 2 corrections détaillées.

Parent ? Suivez les progrès de votre enfant.

Tous les cours de NSI