Filtrer les données d'un fichier CSV en Python

1. À propos du filtrage des données d'un fichier CSV en Python

Le filtrage des données consiste à sélectionner uniquement les lignes d'un fichier CSV qui respectent une ou plusieurs conditions. Avec le module csv de Python, on peut lire les lignes avec csv.reader() ou csv.DictReader(), tester une condition, puis conserver uniquement les données souhaitées.

Dans ce tutoriel, nous utiliserons le fichier etudiants.csv suivant. Il contient un identifiant, un nom, un âge, une ville et une note pour chaque étudiant.

Sortie :

Pour faciliter le filtrage, csv.DictReader() est particulièrement pratique, car chaque ligne est représentée sous forme de dictionnaire. On peut ainsi accéder aux valeurs en utilisant directement les noms des colonnes.

Sortie :

2. Filtrer les données selon une valeur

Un filtre simple consiste à sélectionner les lignes dont une colonne possède une valeur précise. Dans l'exemple suivant, nous affichons uniquement les étudiants dont l'âge est égal à 21 ans.

Sortie :

Les valeurs obtenues avec csv.DictReader() sont des chaînes de caractères. C'est pourquoi la valeur de la colonne "age" est comparée ici à la chaîne "21" et non directement à l'entier 21.

Filtrer selon une ville

Le même principe permet de sélectionner les lignes correspondant à une ville précise. L'exemple suivant recherche l'étudiant habitant à Rabat.

Sortie :

Filtrer sans tenir compte des majuscules et minuscules

Pour effectuer une comparaison de texte sans tenir compte de la casse, on peut utiliser casefold(). Ainsi, "oujda", "OUJDA" et "Oujda" peuvent être comparés de manière uniforme.

Sortie :

3. Filtrer les données selon une condition numérique

Pour appliquer des comparaisons numériques telles que >, <, >= ou <=, il faut généralement convertir les valeurs lues dans le fichier CSV. On utilise int() pour les entiers et float() pour les nombres décimaux.

Filtrer selon l'âge

Le programme suivant sélectionne uniquement les étudiants âgés de 21 ans ou plus. La valeur de la colonne "age" est convertie en entier avant la comparaison.

Sortie :

Filtrer selon une note minimale

La colonne "note" contient des nombres qui peuvent être décimaux. On utilise donc float() pour sélectionner les étudiants ayant une note supérieure ou égale à 15.

Sortie :

Filtrer selon un intervalle

On peut également vérifier si une valeur appartient à un intervalle. Le programme suivant conserve les étudiants dont la note est comprise entre 14 et 17 inclus.

Sortie :

4. Filtrer avec plusieurs conditions

Python permet de combiner plusieurs critères de filtrage avec les opérateurs logiques and, or et not.

Filtrer avec l'opérateur and

L'opérateur and impose que toutes les conditions soient vraies. L'exemple suivant sélectionne les étudiants âgés d'au moins 20 ans et ayant une note supérieure ou égale à 15.

Sortie :

Filtrer avec l'opérateur or

L'opérateur or conserve une ligne lorsqu'au moins une des conditions est vraie. Dans l'exemple suivant, on sélectionne les étudiants habitant à Oujda ou à Rabat.

Sortie :

Utiliser l'opérateur in

Lorsque plusieurs valeurs sont acceptées pour une même colonne, l'opérateur in permet d'obtenir une écriture plus compacte. Ici, seules les villes Oujda, Rabat et Agadir sont retenues.

Sortie :

Filtrer avec une compréhension de liste

Lorsque les données sont chargées en mémoire, une compréhension de liste permet d'effectuer un filtrage de manière concise. L'exemple suivant conserve les étudiants dont la note est strictement supérieure à 15.

Sortie :

5. Enregistrer les données filtrées dans un fichier CSV

Afficher les résultats d'un filtre ne modifie pas le fichier CSV. Pour conserver les lignes sélectionnées, on peut les écrire dans un nouveau fichier avec csv.DictWriter().

Créer un nouveau fichier avec les lignes filtrées

Le programme suivant sélectionne les étudiants ayant une note supérieure ou égale à 15 et les enregistre dans un nouveau fichier nommé etudiants_filtres.csv.

Sortie :

Le fichier etudiants_filtres.csv contient uniquement les étudiants dont la note est supérieure ou égale à 15.

Sortie :

Filtrer un fichier volumineux ligne par ligne

Pour un fichier volumineux, il n'est pas nécessaire de charger toutes les données dans une liste. On peut lire chaque ligne, tester la condition et écrire immédiatement les lignes retenues dans le fichier de destination.

Sortie :

Cette approche est particulièrement adaptée aux fichiers CSV volumineux, car les lignes sont traitées progressivement et ne sont pas toutes conservées simultanément en mémoire.

6. À retenir !

Le filtrage d'un fichier CSV permet de sélectionner uniquement les lignes qui répondent à un ou plusieurs critères. Avec Python, cette opération peut être réalisée simplement avec le module csv et des conditions.

  • csv.DictReader() permet d'accéder aux valeurs à partir du nom des colonnes.
  • Une instruction if permet de conserver uniquement les lignes qui satisfont une condition.
  • Les valeurs lues avec csv.DictReader() sont des chaînes de caractères.
  • Pour une comparaison numérique, il faut généralement convertir la valeur avec int() ou float().
  • Les opérateurs >, <, >= et <= permettent de construire des filtres numériques.
  • and permet d'imposer plusieurs conditions simultanément.
  • or permet d'accepter plusieurs possibilités.
  • in est pratique pour tester l'appartenance à une collection de valeurs.
  • Une compréhension de liste permet de filtrer facilement des lignes déjà chargées en mémoire.
  • csv.DictWriter() permet d'enregistrer les résultats du filtrage dans un nouveau fichier CSV.

Le programme suivant résume les principales étapes : lecture du fichier, application de plusieurs conditions et enregistrement des lignes sélectionnées dans un nouveau fichier CSV.

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/


loader-image
Le prix initial était : € 11,00.Le prix actuel est : € 10,00.
Le prix initial était : € 6,00.Le prix actuel est : € 5,00.



Leave a Reply

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