Lire seulement certaines colonnes d'un fichier CSV en Python

1. À propos de la lecture de certaines colonnes d'un fichier CSV en Python

Un fichier CSV peut contenir un grand nombre de colonnes alors qu'un programme n'a besoin que de quelques informations. Il est alors possible de lire seulement certaines colonnes d'un fichier CSV en utilisant le module standard csv de Python.

Il existe principalement deux approches. Avec csv.reader(), les colonnes sont sélectionnées à partir de leurs indices. Avec csv.DictReader(), elles peuvent être sélectionnées directement à partir de leurs noms.

Le programme suivant illustre simplement les deux manières de représenter une même ligne CSV.

Sortie :

Dans le premier cas, nous utilisons les positions 0 et 3. Dans le second, nous utilisons directement les noms nom et note. Pour les fichiers possédant une ligne d'en-tête, DictReader() rend généralement le programme plus explicite et plus facile à maintenir.

2. Préparer le fichier CSV utilisé dans les exemples

Considérons un fichier nommé etudiants.csv contenant six colonnes : identifiant, nom, age, ville, note et filiere. Dans la plupart des exemples, nous ne souhaitons récupérer qu'une partie de ces informations.

Le fichier utilisé possède le contenu suivant.

Sortie :

Nous pouvons afficher le contenu du fichier avant de sélectionner les colonnes qui nous intéressent.

Sortie :

Dans les sections suivantes, nous allons par exemple extraire uniquement les colonnes nom, ville et note.

3. Lire certaines colonnes avec csv.reader()

La fonction csv.reader() retourne chaque ligne sous forme de liste. Pour sélectionner certaines colonnes, nous utilisons donc leurs indices. Les indices commencent à 0.

Dans notre fichier, nom correspond à l'indice 1, ville à l'indice 3 et note à l'indice 4. Le programme suivant affiche uniquement ces trois colonnes.

Sortie :

La fonction next() permet ici d'ignorer la première ligne contenant l'en-tête. Cette technique est simple, mais elle dépend de la position exacte des colonnes dans le fichier.

Nous pouvons également récupérer plusieurs colonnes directement dans une nouvelle liste.

Sortie :

4. Lire certaines colonnes avec csv.DictReader()

La classe csv.DictReader() est particulièrement pratique lorsque le fichier possède une ligne d'en-tête. Chaque ligne est représentée par un dictionnaire et les noms des colonnes deviennent les clés de ce dictionnaire.

Pour récupérer uniquement le nom, la ville et la note, il suffit d'utiliser les clés correspondantes.

Sortie :

Cette méthode est généralement plus lisible que l'utilisation d'indices numériques. Une expression comme ligne["ville"] indique clairement la donnée manipulée.

Nous pouvons également créer pour chaque ligne un nouveau dictionnaire ne contenant que les colonnes souhaitées.

Sortie :

Cette représentation devient très pratique si les données sélectionnées doivent ensuite être filtrées, transformées ou enregistrées dans un autre fichier.

5. Sélectionner dynamiquement les colonnes à lire

Au lieu d'écrire explicitement chaque nom de colonne dans le programme, nous pouvons placer les colonnes souhaitées dans une liste. Cette technique permet de rendre le traitement plus générique et plus facile à modifier.

Dans l'exemple suivant, la liste colonnes contient les trois champs que nous souhaitons récupérer.

Sortie :

Pour sélectionner d'autres colonnes, il suffit maintenant de modifier la liste colonnes sans changer la boucle de lecture.

Nous pouvons aussi créer automatiquement un dictionnaire contenant uniquement les champs sélectionnés.

Sortie :

Cette approche est utile lorsque les colonnes à extraire sont déterminées par une configuration, un choix utilisateur ou une autre partie du programme.

6. Lire une seule colonne d'un fichier CSV

Il est parfois nécessaire d'extraire une seule colonne. Avec DictReader(), il suffit d'accéder à la clé correspondant à cette colonne.

Le programme suivant lit uniquement la colonne nom.

Sortie :

Nous pouvons également stocker toute une colonne dans une liste Python. L'exemple suivant récupère uniquement les villes.

Sortie :

Si nous souhaitons récupérer les valeurs distinctes d'une colonne, nous pouvons utiliser un ensemble Python.

Sortie :

7. Filtrer les lignes à partir d'une colonne sélectionnée

La sélection des colonnes peut être combinée avec un filtrage des lignes. Nous pouvons par exemple utiliser la colonne note pour sélectionner certains étudiants tout en n'affichant que leur nom et leur ville.

Le programme suivant affiche le nom et la ville des étudiants ayant une note supérieure ou égale à 15.

Sortie :

La colonne note est utilisée pour effectuer le test, mais elle n'est pas obligatoirement affichée dans le résultat. Une colonne peut donc servir uniquement de critère de filtrage.

Nous pouvons de la même manière sélectionner les étudiants appartenant à une filière particulière et afficher seulement certaines colonnes.

Sortie :

Cette combinaison entre sélection de colonnes et filtrage de lignes est très fréquente lors du traitement de fichiers CSV.

8. Convertir et traiter les colonnes numériques sélectionnées

Les valeurs récupérées avec csv.reader() ou csv.DictReader() sont généralement des chaînes de caractères. Une colonne numérique doit donc être convertie avant d'effectuer des calculs.

Le programme suivant sélectionne uniquement les colonnes nom et note, puis convertit la note avec float().

Sortie :

Nous pouvons ainsi effectuer des calculs uniquement à partir de la colonne qui nous intéresse. L'exemple suivant calcule la moyenne de la colonne note.

Sortie :

Il n'est donc pas nécessaire de transformer toutes les colonnes du fichier lorsque le calcul ne concerne qu'une partie des données.

9. Extraire certaines colonnes vers un nouveau fichier CSV

Après avoir sélectionné certaines colonnes, nous pouvons les enregistrer dans un nouveau fichier CSV. La combinaison de csv.DictReader() et csv.DictWriter() est particulièrement adaptée à cette opération.

Le programme suivant extrait uniquement les colonnes nom, ville et note du fichier etudiants.csv et les enregistre dans selection.csv.

Sortie :

Le nouveau fichier selection.csv contient uniquement les trois colonnes demandées.

Sortie :

Nous pouvons aussi combiner sélection des colonnes et filtrage des lignes. L'exemple suivant exporte uniquement le nom et la note des étudiants ayant une note supérieure ou égale à 15.

Sortie :

Le fichier admis.csv obtenu contient uniquement les deux colonnes sélectionnées et les lignes satisfaisant la condition.

Sortie :

10. À retenir !

Python permet facilement de lire seulement certaines colonnes d'un fichier CSV. Le choix de la méthode dépend principalement de la manière dont nous souhaitons identifier les colonnes.

  • csv.reader() retourne chaque ligne sous forme de liste.
  • Avec csv.reader(), les colonnes sont généralement sélectionnées à partir de leurs indices.
  • csv.DictReader() retourne chaque ligne sous forme de dictionnaire.
  • Avec DictReader(), une colonne peut être récupérée directement à partir de son nom.
  • L'utilisation des noms de colonnes rend généralement le programme plus lisible que l'utilisation d'indices numériques.
  • Une liste comme ["nom", "ville", "note"] permet de sélectionner dynamiquement plusieurs colonnes.
  • Une seule colonne peut être extraite et stockée dans une liste ou un ensemble Python.
  • Une colonne peut être utilisée comme critère de filtrage sans nécessairement apparaître dans le résultat affiché.
  • Les colonnes numériques lues dans un CSV doivent généralement être converties avec int() ou float() avant les calculs.
  • La combinaison de DictReader() et DictWriter() permet d'extraire certaines colonnes vers un nouveau fichier CSV.

Le modèle suivant résume une méthode simple et réutilisable pour sélectionner dynamiquement plusieurs colonnes avec DictReader().

Sortie :

 




Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/


Leave a Reply

Your email address will not be published. Required fields are marked *