Menu

Ordonner un très gros fichier .csv par ordre croissant d'une colonne [Résolu]

- - Dernière réponse :  Kikumachi - 5 févr. 2019 à 11:17
Bonjour,

J'ai un fichier .csv dont l'une des colonnes stocke des identifiants numériques (du genre '331506924', '442109275', etc.) et, n'étant pas très familier avec les méthodes d'édition de fichiers par algorithme, je voudrais savoir s'il existe une méthode (rapide ?) pour ordonner ce fichier par ordre croissant des identifiants.

Le problème, c'est que ce fichier est absolument énorme (plus de 30 millions de lignes), je ne peux donc pas le traiter dans son entièreté avec un logiciel tableur type Excel ou LibreOffice Calc car leur capacité mémoire sature au bout d'un million de lignes.

Dans l'idéal, existe-t-il un tableur capable de gérer d'énormes quantités de données et qui possède une fonction interne de tri selon une colonne ? Ou bien, existe-t-il un programme Python capable de réaliser cette tâche ?

Merci d'avance pour votre réponse.

Cordialement,
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
Messages postés
4910
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
15 février 2019
904
1
Merci
Salut Kikumachi,

Tu devrais utiliser la bibliothèque
pandas
de Python.

Disons que la colonne que tu veux trier est dénommée "col3", que ton fichier de départ est
fichier.csv
, que celui-ci comporte une première colonne dénommée "col1" et que le fichier trié doit être
new.csv
.

Le script Python pour lire le fichier csv, le trier et sauvegarder une version triée serait :

import pandas

df = pandas.read_csv('fichier.csv', index_col='col1')
df = df.sort_values(by=['col3'], ascending=True)
df.to_csv('new.csv')

Dal

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 57888 internautes nous ont dit merci ce mois-ci

Après vérification, j'avais oublié de rajouter "delimiter = ';'" dans le script.

Je l'ai fait tourner et c'est bon, merci beaucoup pour votre aide !
[Dal]
Messages postés
4910
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
15 février 2019
904 -
de rien, bravo !

effectivement, par défaut, pandas utilise le délimiteur virgule
,
pour le format CSV (CSV signifiant d'ailleurs "comma separated values")
Merci encore !

Après, une autre question que je me pose : est-il possible de réaliser plusieurs tris de façon successive ?

Par exemple, vous pouvez observer que j'ai une colonne avec des valeurs temporelles (la colonne "DATE", remplie avec des sortes de timestamps). Si je voulais par exemple trier par ordre croissant d'identifiant, et que chaque groupe de lignes associé à un identifiant soit trié par ordre chronologique (timestamp croissant), devrais-je procéder de la façon suivante ?

- Faire un script capable de trier par ordre chronologique pour tous les identifiants et avoir un fichier trié par timestamp croissant, mais avec des identifiants mélangés
- Refaire un tri avec le script utilisé, de façon à ce que les lignes soient retriées par identifiant croissant tout en préservant implicitement le tri chronologique.

Merci d'avance
[Dal]
Messages postés
4910
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
15 février 2019
904 -
Non, tu peux directement faire des tris sur plusieurs colonnes avec pandas.

Comme cela :

df = df.sort_values(['IDENTIFIANT', 'DATE'], ascending=[True, True])
Je viens de tester et c'est exactement ce que je voulais, merci beaucoup !
Commenter la réponse de [Dal]