IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Compter des chiffres contenu dans un fichier CSV avant import Excel


Sujet :

Python

  1. #1
    Invité
    Invité(e)
    Par défaut Compter des chiffres contenu dans un fichier CSV avant import Excel
    Bonjour,

    en récupérant des données j'arrive à générer un fichier CSV contenant ce type de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    711;19/10/13;6,81;2;0;0;2;11;2;1;3;1;0;6;2;3;7;4;8;2;4;6;4;1;2;2;1;2;11;7;9;10;-;;-;;5;55 360;90;3 076;923;299,8;
    714;26/10/13;8,52;3;0;0;3;8;7;3;9;2;2;3;0;8;2;4;7;3;11;1;2;10;1;1;0;5;4;4;5;5;9;111 111;184;1 593;2312;126,7;17157;17,0;
    717;02/11/13;7,28;2;1;1;4;7;3;2;7;3;2;4;1;7;2;5;7;3;7;2;5;4;1;2;0;1;8;6;9;11;-;;1;181 246;46;3 940;701;258,5;
    720;09/11/13;7,11;2;2;1;5;10;3;3;7;2;2;3;0;8;4;2;6;6;6;5;3;3;2;2;1;3;7;7;9;11;4;128 148;117;2 191;1442;177,7;11168;22,9;
    Ainsi, quand j'importe celà dans un tableur avec le caractère de séparation ";", j'ai chaque nombre dans une cellule.
    Exemple :
    Nom : tableur.PNG
Affichages : 1156
Taille : 6,8 Ko

    Ensuite, dans le tableur, mon but est de pouvoir compter pour certaines colonnes, combien j'ai de chiffres 0, combien de chiffres 1, etc... de manière à avoir ce rendu :

    Nom : tableur2.PNG
Affichages : 1248
Taille : 24,0 Ko

    Pour avoir ce rendu, dans le tableur, en l'occurence une feuille Google Sheet, j'utilise une formule du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =COUNTIF(D$7:D$10;$C12)
    avec D7 à D10 la colonne, et C12 le chiffre à rechercher (0, 1, 2, ....)
    Dans EXCEL, c'est NB.SI(plage;critère)

    Comment faire dans mon programme Python pour compter les 0, 1, 2,... de chaque colonne et les afficher à la fin de mon CSV ?

    Y a t-il mieux que le CSV pour traiter les données ?

    Générer directement un fichier Excel qui pourrait être mis en page à partir du programme Python ?


    Merci de m'avoir lu,
    JP

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 602
    Points : 56 705
    Points
    56 705
    Billets dans le blog
    40
    Par défaut
    Bonjour,

    comme ça vite fait, je dirais que c'est l'affaire du module collections et sa classe Counter .

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> from collections import Counter
     
    >>> c=Counter(['A', 'A', 'B', 'A', 'C', 'A', 'B'])
     
    >>> c.most_common()
    [('A', 4), ('B', 2), ('C', 1)]

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Salut.
    Comment faire dans mon programme Python pour compter les 0, 1, 2,... de chaque colonne et les afficher à la fin de mon CSV ?

    Y a t-il mieux que le CSV pour traiter les données ?

    Générer directement un fichier Excel qui pourrait être mis en page à partir du programme Python ?
    Tu peux utiliser la bibliothèque pywin32 pour réaliser le traitement puis manipuler le format du fichier XLS ; mais elle est difficile à utiliser et ne fonctionne que sur Windows.
    Utiliser un fichier CSV et faire un traitement en pur Python suffit. Après tu peux utiliser la bibliothèque xlrd/xlwt pour intégrer les résultats dans un classeur XLS. Elle est simple à utiliser.

    Le plus simple est de calculer l'histogramme de chaque colonne. Numpy par exemple permet de le faire. Je joins mon code – en Python natif - qui utilise un defaultdict.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #!/usr/bin/python2
    # -*- coding:utf-8 -*-
     
    import sys
    import csv
    from itertools import izip
    from collections import defaultdict
     
    MAXI = 10
     
     
    def histogram(iterable):
        hist = defaultdict(int)
        for integer in iterable:
            try:
                idx = int(integer)
            except ValueError:
                continue
            hist[idx if idx <= MAXI else MAXI + 1] += 1
        return map(str, (hist.get(idx, 0) for idx in range(MAXI + 2)))
     
     
    def csv_with_stat(filename):
        with open(filename, "r") as fobj:
            columns = izip(*csv.reader(fobj, delimiter=";"))
     
        ans = list()
        headers = (
            [""] * (MAXI + 2),
            [""] * (MAXI + 2),
            ["Nombre de {}".format(i) for i in range(MAXI + 1)] \
            + ["Supérieur à {}".format(MAXI)],
        )
        for h, c in izip(headers, columns):
            ans.append(list(c) + [""] + h)
        for c in columns:
            ans.append(list(c) + [""] + histogram(c))
     
        writer = csv.writer(sys.stdout, delimiter=";")
        writer.writerows(izip(*ans))
     
     
    if __name__ == '__main__':
        path = sys.argv[1]
        csv_with_stat(path)

Discussions similaires

  1. [ADO] Exécuter des requêtes contenues dans un fichier SQL
    Par Lucas Panny dans le forum Visual C++
    Réponses: 1
    Dernier message: 29/01/2008, 06h35
  2. Sauver et restaurer des informations contenues dans un fichier
    Par lilimilou29 dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 14/06/2007, 20h08
  3. Réponses: 2
    Dernier message: 09/06/2007, 22h09
  4. Utiliser des fonctions contenues dans un fichier .bas
    Par usbeck dans le forum Visual C++
    Réponses: 4
    Dernier message: 11/08/2006, 12h03
  5. Réponses: 12
    Dernier message: 27/01/2006, 11h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo