0
votes

Python, si les instructions sur les boucles

Je rencontre un problème d'exclusion de certaines données de mon script python, apprentissage débutant ici!

Actuellement, j'ai un fichier csv avec c. 19 colonnes, je dois imprimer les col 0, 1, 8, 18 - ce que j'ai réussi.

La colonne 8, a une valeur de 0,00 ou plus. Je voudrais que le script exclut ces lignes et ne les imprime pas. J'ai essayé l'instruction if, mais le code ci-dessous s'exécute et imprime simplement toutes les lignes - n'imprime pas seulement celles de 0.01 ou plus.

Code actuel:

import csv

m = open('data.csv')
csv_m = csv.reader(m)

for row in csv_m:
        if row[8] >= 1:
                print(row[0],row[1],row[8],row[18],)

p>


4 commentaires

Le premier index d'une liste est la ligne [0] (0 indexé). Essayez la ligne [7].


N'y a-t-il pas eu d'erreur? Les données lues depuis csv sont de type str . Vous ne pouvez donc pas comparer directement avec int . Essayez float (row [8])> = 1


Vous dites "0,01 ou plus" dans la description, mais votre code indique. > = 1


les jours de code> = 1 car j'essayais simplement de le faire fonctionner. Telle qu'imprimée, aucune erreur n'est définie mais toutes les lignes s'impriment.


3 Réponses :


-2
votes

Cela peut être facilement fait si vous êtes prêt à utiliser la bibliothèque Pandas.

Vous pouvez essayer quelque chose comme ceci: xxx


1 commentaires

Pas besoin de panda ici.



0
votes

Vous devriez utiliser

avec open ('file', 'mode') comme fichier:

cela garantira que le fichier sera fermé à la fin de l'opération. C'est une bonne pratique python.

import pandas as pd

data = pd.read_csv('data.csv')

filter = data[8] >= 1
filtered_data = data[filter]

for index, row in filtered_data.iterrows():
  print (row[0],row[1],row[8],row[18])

Vous devriez publier un exemple de fichier csv pour le clarifier. Vérifiez le format de la ligne, vous devrez peut-être la convertir en flottant avant de comparer .

Vous avez la possibilité d'utiliser des pandas puisqu'il s'agit d'un csv

with open('data.csv', 'r') as file:  
  for row in file: 
    if row[8] >= 1.0 :
      print(row)


3 commentaires

pourquoi tout le monde insiste-t-il pour utiliser panda quand ce n'est pas nécessaire?


parce que c'est simple pour les débutants


Je ne pense pas qu'une bibliothèque de 800 livres soit plus simple qu'un simple module csv, et il vaut mieux pour un débutant de comprendre les bases (dans ce cas, ce n'est pas parce qu'une chaîne est composée de caractères numériques que c'est un numérique) que d'utiliser solutions alambiquées.



1
votes

Les données csv sont toujours des chaînes, et "1" (chaîne) ne sera jamais comparée égale à 1 (int) ou 0.01 (float ). Vous devez soit transformer explicitement vos données csv dans le type approprié (en utilisant int (row [8]) ou float (row [8]) ou, bien plus simplement, comparer avec la représentation sous forme de chaîne de votre valeur cible, si:

# py3 version
with open("yourfile.csv", newline='') as f:
    reader = csv.reader(f)
    for row in reader:
        if row[8] > "0.01":
            print(row[0],row[1],row[8],row[18])

De plus, vous voulez 1 / ouvrir votre fichier en mode binaire (python2) ou avec le newline = '' (python3) et 2 / utilisez une instruction with pour vous assurer que votre fichier sera fermé quoi qu'il arrive:

if row[8] == "1": # or "0.01"
   # etc


0 commentaires