2017-03-17 1 views
-1

J'ai un fichier CSV séparé par des virgules. J'ai besoin de lire le fichier, déterminer quelles lignes contiennent un nombre qui doit être supérieur à un certain nombre (par exemple 711), et calculer le pourcentage de ces chiffres qui correspondent aux critères.Comment puis-je calculer le pourcentage d'un nombre supérieur ou égal à un certain nombre à partir d'un fichier?

Mon code est jusqu'à présent comme suit:

myfile = open('3517315a.csv','r') 

myfilecount = 0 

linecount = 0 

firstline = True 

for line in myfile: 
    if firstline: 
     firstline = False 
     continue 
fields = line.split(',') 

    linecount += 1 
    count = int(fields[0]) 
    colour = str(fields[1]) 
    channels = int(fields[2]) 
    code = str(fields[3]) 
    correct = str(fields[4]) 
    reading = float(fields[5]) 

print('percentage of numbers greater than or equal to 711 is %d:') 

Je ne sais pas comment je peux définir la condition, puis calculer le pourcentage.

+1

Et décrivez votre problème s'il vous plaît – abccd

+0

Assurez-vous que tout votre code est formaté en utilisant l'outil Code '{}' lors de la création de votre question. Donc le code s'affiche correctement. Assurez-vous également d'écrire quelque chose dans votre question. Ne vous fiez pas seulement à la question elle-même. –

+0

Essayé d'expliquer quel est le but du code, et quelle pourrait être la question. Je suppose que quelqu'un commence à coder et utilise Python pour apprendre. – gpoo

Répondre

0

Disons que vous êtes intéressé à ne comptant que le premier champ (nombre), le code peut être quelque chose comme:

MAGIC_NUMBER = 711 

counter = 0 
myfile = open('3517315a.csv', 'r') 

myfile.readline() # Skip the first line 

for i, line in enumerate(myfile, 1): 
    count = int(line.split(',')[0]) 

    if count >= MAGIC_NUMBER: 
     counter += 1 

percentage = float(counter)/i * 100 
print('%3.2f%% of numbers is >= %d' % (percentage, MAGIC_NUMBER)) 

Vous pouvez utiliser enumerate pour obtenir automatiquement une séquence de nombres, dans ce cas , à la lecture de chaque line de myfile, à partir de 1.

Parce que nous ne sommes intéressés que dans le premier champ, et nous savons que la méthode split retourne une liste, nous ne prenons que le premier élément (indice 0). Nous convertissons ce nombre en un nombre (int).

Ensuite, vous devez compter ces nombres en fonction de la condition donnée.

Une fois le fichier traité, i contient le dernier nombre de lignes lues. Nous pouvons donc calculer le pourcentage. Notez l'utilisation de float dans l'un des numéros. C'est pour dire à l'opérateur / que nous voulons un float en conséquence. Copier coller votre code, ne pas capture d'écran.

0

Vous pouvez le faire avec une commande awk: -

cat 3517315a.csv | awk -F ',' 'BEGIN{count=0;total=0;}{total++;if($1>=711)count++;}END{print 100*count/total}' 

Explication: -

awk -F ',' - spécifie le champ seperator

BEGIN{count=0;total=0;} - initialise les variables première fois.

{total++;if($1>=711)count++;} - s'exécute pour chaque ligne du fichier. total est incrémenté pour chaque ligne, le nombre est incrémenté pour seulement> = 711.

END{print 100*count/total} - s'exécute après que toutes les lignes ont été analysées. Percentage=count*100/total

+0

pouvez-vous s'il vous plaît expliquer plus loin? – Alan

+0

Alan, j'ai ajouté une explication. –