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 :

calcul moyenne en python à partir fichier CSV


Sujet :

Python

Vue hybride

dominiquelola calcul moyenne en python à... 15/12/2020, 16h11
Aelurus_ Bonjour, Déjà reprend ton... 15/12/2020, 20h19
marco056 A part l'indentation, je ne... 15/12/2020, 21h37
VinsS Salut, Si on comprend bien... 16/12/2020, 08h26
Sve@r Bonjour Es-tu sur... 17/12/2020, 13h27
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2020
    Messages : 2
    Par défaut calcul moyenne en python à partir fichier CSV
    Bonjour,

    lors de mon calcul de moyenne, je n'arrive pas à exclure les zéros de mon fichiers.
    voici mon code, je ne trouve pas mon erreur.
    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
     
    import csv
     
    with open('DataToAnalyze.csv') as csv_file:
    	reader = csv.reader(csv_file)
    	average = 0
    	sum = 0
    	row_count = 0
    		for row in reader:
    		for column in row:
    			n=float(column)
    					if n != 0:
    						sum += n
    						row_count += 1
    	average = sum / row_count
    	print('La moyenne est :', average)
    	csv_file.close()
    merci d'avance pour une aide

  2. #2
    Membre confirmé
    Homme Profil pro
    Curieux
    Inscrit en
    Avril 2020
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 114
    Par défaut
    Bonjour,

    Déjà reprend ton indentation car elle n'est pas fonctionnelle, c'est surprenant que tu n'aies pas de message d'erreur.

    Puis essaye avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import csv
     
    file = 'DataToAnalyze.csv' # 0;10;25;10;25
     
    with open(file, 'r') as file:
        reader = csv.reader(file, delimiter=';')
        datas = [ligne for ligne in reader]
        l = [i for i in datas[0] if i != '0']
        somme = 0
        for data in datas[0]:
            somme = somme + float(data)
        moyenne = somme/len(datas[0])
        file.close()
    print('la moyenne est : ',moyenne)

  3. #3
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    A part l'indentation, je ne vois pas d'erreur.
    average = 0 ne sert à rien au début.

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Si on comprend bien les items de valeur zéro sont exclus du calcul de la moyenne.
    Dans ce cas ton code peut être simplifié comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    data = [[12, 50, 0, 1],
            [5, 5, 10, 0],
            [8, 0, 0, 10]]
    sum_ = 0
    count = 0
    for row in data:
        for col in row:
            sum_ += float(col)
            count += col > 0
     
    average = sum_ / count
    print("Sum: %s, count: %s, average: %s" %(sum_, count, average))

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par VinsS Voir le message
    Dans ce cas ton code peut être simplifié comme ceci:
    Es-tu sur qu'additionner "0" sans le tester soit une optimisation ? Surtout que juste en dessous tu testes quand-même si cette valeur vaut 0.
    Ne vaut-il donc pas mieux la tester (puisque de toute façon le test reste obligatoire) et seulement si la valeur correspond alors l'additionner ? On élimine ainsi une addition parfois inutile...

    Sinon passer par une liste en intension
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    d=tuple(float(c) for row in data for c in row if c != 0)
    average=sum(d)/len(d)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Es-tu sur qu'additionner "0" sans le tester soit une optimisation ? Surtout que juste en dessous tu testes quand-même si cette valeur vaut 0.
    Ne vaut-il donc pas mieux la tester (puisque de toute façon le test reste obligatoire) et seulement si la valeur correspond alors l'additionner ? On élimine ainsi une addition parfois inutile...
    Ce n'est pas une question d'optimisation, tout ce qui simplifie le code est bienvenu.

    Par contre, vérifier avant, ça s'appelle "Look before you leap" et ce n'est pas pythonique.

    Je préfère de loin mon code.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Python-Création fichier CSV + création de courbes à partir des données
    Par Alex-python38 dans le forum Général Python
    Réponses: 1
    Dernier message: 28/08/2018, 10h14
  2. calcule de temps a partir d'un fichier CSV
    Par AI_LINUX dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 10/05/2015, 18h28
  3. python et fichier .CSV
    Par billyrose dans le forum Général Python
    Réponses: 7
    Dernier message: 22/07/2008, 07h53
  4. Fichier CSV à partir un programme C
    Par Premium dans le forum C
    Réponses: 3
    Dernier message: 25/05/2006, 23h53
  5. Ecrire un fichiers CSV à partir de 3 fichiers Excel
    Par yas2006 dans le forum Documents
    Réponses: 22
    Dernier message: 14/03/2006, 14h10

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