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

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

Le module csv de Python permet de lire et d'écrire des fichiers CSV. Pour trier les données, on peut lire les lignes du fichier, les placer dans une liste, puis utiliser la fonction sorted() ou la méthode sort().

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 :

Avant d'effectuer un tri, on peut lire le fichier avec csv.DictReader(). Chaque ligne devient alors un dictionnaire dont les clés correspondent aux noms des colonnes.

Sortie :

Il faut remarquer que les valeurs obtenues avec csv.DictReader() sont des chaînes de caractères. Cette particularité est importante lorsqu'on souhaite trier correctement des valeurs numériques.

2. Trier les données selon une colonne de texte

Pour trier les lignes selon une colonne contenant du texte, on peut utiliser sorted() avec le paramètre key. Une fonction lambda permet d'indiquer la colonne utilisée comme clé de tri.

Le programme suivant trie les étudiants selon leur nom dans l'ordre alphabétique.

Sortie :

Le même principe permet de trier les données selon la ville. La valeur de la colonne "ville" devient alors la clé utilisée par sorted().

Sortie :

Pour effectuer un tri alphabétique sans tenir compte des différences entre majuscules et minuscules, on peut appliquer casefold() à la valeur utilisée comme clé.

Sortie :

3. Trier les données selon une colonne numérique

Avec csv.DictReader(), les valeurs lues sont des chaînes de caractères. Pour trier correctement une colonne numérique, il faut donc convertir sa valeur avec int() ou float() selon le type de données.

Trier selon un entier

La colonne "age" contient des nombres entiers. On utilise donc int() dans la clé de tri afin de comparer les âges comme des nombres et non comme des chaînes.

Sortie :

Trier selon un nombre décimal

La colonne "note" peut contenir des nombres décimaux. On utilise donc float() afin d'effectuer un véritable tri numérique.

Sortie :

Pourquoi convertir les valeurs numériques ?

Sans conversion, Python effectue un tri lexicographique des chaînes. Par exemple, la chaîne "100" est placée avant "20" car le premier caractère "1" est inférieur à "2".

Sortie :

4. Effectuer un tri décroissant et un tri sur plusieurs colonnes

Trier dans l'ordre décroissant

Par défaut, sorted() effectue un tri croissant. Pour obtenir un tri décroissant, il suffit d'utiliser le paramètre reverse=True. L'exemple suivant classe les étudiants de la meilleure note à la plus faible.

Sortie :

Trier sur plusieurs colonnes

Pour trier selon plusieurs critères, la fonction utilisée comme clé peut retourner un tuple. Le programme suivant trie d'abord les étudiants selon leur âge, puis selon leur nom lorsque plusieurs étudiants ont le même âge.

Sortie :

Différence entre sorted() et sort()

La fonction sorted() crée une nouvelle liste triée sans modifier la liste d'origine. La méthode list.sort(), quant à elle, trie directement la liste existante et retourne None.

Sortie :

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

Trier les lignes en mémoire ne modifie pas automatiquement le fichier CSV. Pour conserver le nouvel ordre, il faut écrire les données triées dans un fichier avec csv.DictWriter().

Créer un nouveau fichier CSV trié

Le programme suivant lit etudiants.csv, trie les étudiants par note décroissante et enregistre le résultat dans un nouveau fichier nommé etudiants_tries.csv.

Sortie :

Le nouveau fichier contient maintenant les étudiants classés de la note la plus élevée à la note la plus faible.

Sortie :

Remplacer le fichier original par sa version triée

Si l'on souhaite modifier directement l'ordre des données du fichier original, on peut lire toutes les lignes, fermer le fichier, effectuer le tri, puis rouvrir le même fichier en mode écriture. Il est important d'avoir terminé la lecture avant de réécrire le fichier.

Sortie :

Après cette opération, le fichier original contient les étudiants dans l'ordre alphabétique de leur nom.

Sortie :

6. À retenir !

Pour trier les données d'un fichier CSV en Python, on lit généralement les lignes du fichier, on les trie avec sorted() ou sort(), puis on les réécrit si l'on souhaite enregistrer le résultat.

  • csv.DictReader() facilite le tri en permettant d'accéder aux données par le nom des colonnes.
  • sorted() retourne une nouvelle liste triée.
  • list.sort() modifie directement la liste existante et retourne None.
  • Le paramètre key permet de préciser la colonne utilisée pour le tri.
  • Une fonction lambda est pratique pour construire la clé de tri.
  • Pour une colonne numérique, il faut généralement convertir les valeurs avec int() ou float().
  • Le paramètre reverse=True permet d'obtenir un tri décroissant.
  • Une clé sous forme de tuple permet d'effectuer un tri selon plusieurs critères.
  • csv.DictWriter() permet d'enregistrer les lignes triées dans un fichier CSV.
  • Le tri réalisé en mémoire ne modifie le fichier original que si les données sont ensuite réécrites dans ce fichier.

Le programme suivant résume les principales étapes permettant de lire un fichier CSV, de trier ses données selon une colonne numérique et d'enregistrer le résultat dans un nouveau fichier.

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 *