Tri tableau csv

Résolu
Louna -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je voudrais trier dans l'ordre croissant les dates d'un fichier
.csv 
. Voici mon programme:

import pandas

df = pandas.read_csv('mon_fichier.csv',  delimiter=';', index_col='Dates')
df = df.sort_values(by=['Dates'], ascending=True)
df.to_csv('new.csv')


Après exécution, on me met
"Key error='Date'"
, j'ai tout vérifié et je ne comprends pas.

Merci d'avance.

2 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 942
     
    Bonjour,

    Peux-tu donner les premières lignes du fichier
    csv
    (voire le fichier complet s'il n'est pas trop long) ainsi que le message erreur complet ? Par ailleurs
    pandas
    me paraît un peu surdimensionné si c'est ton seul besoin.
    • Si tu veux juste trier ce fichier, et rien d'autre, tu peux importer le fichier dans un tableur (e.g. libreoffice calc et faire le tri),
    • Si tu veux récupérer ses données triées en python, tu peux charger le fichier avec le module python
      csv
      puis trier la structure de données que tu auras remplie lors de la lecture du fichier avec
      sorted
      .


    Bonne chance
    0
    1. Louna
       
      Bonjour,

      Voici les premières lignes de mon fichier .csv (il compte 1080 lignes)

      Date;Code INSEE région;TMin (°C);TMax (°C);TMoy (°C)
      2017-01-13;52;2.75;9.4;6.08
      2017-02-07;52;6.0;12.75;9.38
      2017-10-01;52;14.25;18.25;16.25
      2017-10-09;52;11.25;17.55;14.4
      2017-10-17;52;10.25;24.0;17.12
      2017-05-19;52;6.45;15.45;10.95
      2017-08-30;52;14.75;19.15;16.95
      2017-09-03;52;10.5;19.0;14.75
      2017-09-08;52;14.0;19.7;16.85
      2017-09-12;52;10.3;19.85;15.08
      2017-12-05;52;4.55;9.15;6.85
      2017-01-07;52;-4.8;4.3;-0.25
      2017-11-27;52;0.55;12.15;6.35


      Et voilà le message affiché:

      Traceback (most recent call last):
      File "C:\Users\louna\Pictures\Cours\Premiere\NSI\Projet 3\temperatures.py", line 37, in <module>
      df = df.sort_values(by=['Date'], ascending=True)
      File "C:\EduPython\App\lib\site-packages\pandas\core\frame.py", line 3230, in sort_values
      k = self.xs(by, axis=other_axis).values
      File "C:\EduPython\App\lib\site-packages\pandas\core\generic.py", line 1770, in xs
      return self[key]
      File "C:\EduPython\App\lib\site-packages\pandas\core\frame.py", line 2059, in __getitem__
      return self._getitem_column(key)
      File "C:\EduPython\App\lib\site-packages\pandas\core\frame.py", line 2066, in _getitem_column
      return self._get_item_cache(key)
      File "C:\EduPython\App\lib\site-packages\pandas\core\generic.py", line 1386, in _get_item_cache
      values = self._data.get(item)
      File "C:\EduPython\App\lib\site-packages\pandas\core\internals.py", line 3543, in get
      loc = self.items.get_loc(item)
      File "C:\EduPython\App\lib\site-packages\pandas\indexes\base.py", line 2136, in get_loc
      return self._engine.get_loc(self._maybe_cast_indexer(key))
      File "pandas\index.pyx", line 132, in pandas.index.IndexEngine.get_loc (pandas\index.c:4433)
      File "pandas\index.pyx", line 154, in pandas.index.IndexEngine.get_loc (pandas\index.c:4279)
      File "pandas\src\hashtable_class_helper.pxi", line 732, in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:13742)
      File "pandas\src\hashtable_class_helper.pxi", line 740, in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:13696)
      KeyError: 'Date'


      Merci de votre aide
      0
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 942
     
    Bonjour,

    Comme dit précédemment, pandas est overkill et voici comment tu peux faire avec
    csv
    .

    import csv, io, sys
    from operator import itemgetter
    
    def sort_csv(stream, key=itemgetter(0), input_delimiter=";", output_delimiter="\t"):
      rows = [row for row in csv.reader(stream, delimiter=input_delimiter)]
      header = rows[0]
      rows = rows[1:]
      rows = sorted(rows, key=key)
      ret = "\n".join([
        output_delimiter.join(header),
        "\n".join([
          output_delimiter.join(row) for row in rows
        ])
      ])
      return ret
    
    # Avec une chaîne
    DATA = """Date;Code INSEE région;TMin (°C);TMax (°C);TMoy (°C)
    2017-01-13;52;2.75;9.4;6.08
    2017-02-07;52;6.0;12.75;9.38
    2017-10-01;52;14.25;18.25;16.25
    2017-10-09;52;11.25;17.55;14.4
    2017-10-17;52;10.25;24.0;17.12
    2017-05-19;52;6.45;15.45;10.95
    2017-08-30;52;14.75;19.15;16.95
    2017-09-03;52;10.5;19.0;14.75
    2017-09-08;52;14.0;19.7;16.85
    2017-09-12;52;10.3;19.85;15.08
    2017-12-05;52;4.55;9.15;6.85
    2017-01-07;52;-4.8;4.3;-0.25
    2017-11-27;52;0.55;12.15;6.35"""
    
    # Tri sur la colonne 0, délimiteur d'entrée ";", délimiteur de sortie "\t"
    print("Version avec une chaîne")
    STREAM = io.StringIO(DATA)
    print(sort_csv(STREAM))
    
    # Tri sur la colonne 2. Comme ce sont des entiers on ne veut pas trier selon
    # l'ordre lexicographique et on ne peut donc pas utiliser itemgetter(2)
    print("Tri selon la colonne 2")
    STREAM = io.StringIO(DATA)
    print(sort_csv(STREAM, key=lambda row: float(row[2])))
    
    # Avec un fichier
    try:
      with open("toto.csv") as f:
        print(sort_csv(f))
    except Exception as e:
      print(e, file=sys.stderr)


    Ce qui donne à l'exécution :

    Version avec une chaîne
    Date;Code INSEE région;TMin (°C);TMax (°C);TMoy (°C)
    2017-01-07;52;-4.8;4.3;-0.25
    2017-01-13;52;2.75;9.4;6.08
    2017-02-07;52;6.0;12.75;9.38
    2017-05-19;52;6.45;15.45;10.95
    2017-08-30;52;14.75;19.15;16.95
    2017-09-03;52;10.5;19.0;14.75
    2017-09-08;52;14.0;19.7;16.85
    2017-09-12;52;10.3;19.85;15.08
    2017-10-01;52;14.25;18.25;16.25
    2017-10-09;52;11.25;17.55;14.4
    2017-10-17;52;10.25;24.0;17.12
    2017-11-27;52;0.55;12.15;6.35
    2017-12-05;52;4.55;9.15;6.85
    Tri selon la colonne 2
    Date;Code INSEE région;TMin (°C);TMax (°C);TMoy (°C)
    2017-01-07;52;-4.8;4.3;-0.25
    2017-11-27;52;0.55;12.15;6.35
    2017-01-13;52;2.75;9.4;6.08
    2017-12-05;52;4.55;9.15;6.85
    2017-02-07;52;6.0;12.75;9.38
    2017-05-19;52;6.45;15.45;10.95
    2017-10-17;52;10.25;24.0;17.12
    2017-09-12;52;10.3;19.85;15.08
    2017-09-03;52;10.5;19.0;14.75
    2017-10-09;52;11.25;17.55;14.4
    2017-09-08;52;14.0;19.7;16.85
    2017-10-01;52;14.25;18.25;16.25
    2017-08-30;52;14.75;19.15;16.95


    Bonne chance
    0
    1. Louna
       
      C'est parfait, merci !
      0
    2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 942
       
      De rien, bonne continuation :-)
      0