2017-03-17 78 views
-1

我有一個以逗號分隔的CSV文件。我需要閱讀文件,確定哪些行包含的數字需要高於給定數字(比如711),然後計算符合條件的數字的百分比。如何計算大於或等於某個文件的某個數字的百分比

到目前爲止我的代碼如下:

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:') 

我不知道我怎麼可以設置條件,然後計算百分比。

+1

複製粘貼你的代碼,不要截圖。並進一步描述您的問題 – abccd

+0

確保您的代碼在創建問題時使用代碼工具「{}」進行格式化。所以代碼正確顯示。還要確保在你的問題中寫下一些東西。不要只依賴問題本身。 –

+0

試圖解釋代碼的目的是什麼,問題可能是什麼。我假設的是剛剛開始編碼並正在使用Python進行學習的人。 – gpoo

回答

0

比方說,你有興趣只算第一場(計數),那麼代碼可以是這樣的:

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)) 

您可以使用enumerate自動獲取數字序列,在這種情況下, ,從myfile讀取每個line,從1

起始因爲我們僅在第一個字段感興趣,我們知道split方法返回一個列表,我們只取第一個元素(索引0)。我們將此號碼轉換爲數字(int)。

然後你需要根據給定的條件來計算這些數字。

一旦我們處理完文件,i將保留讀取的最後一行數。所以我們可以計算百分比。注意在其中一個數字中使用float。那就是告訴運營商/我們想要一個float作爲結果。

0

您可以用awk命令做到這一點: -

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

說明: -

awk -F ',' - 指定領域的分隔符

BEGIN{count=0;total=0;} - 初始化變量第一次。

{total++;if($1>=711)count++;} - 針對文件中的每一行執行。每行增加總數,只有那些> = 711的計數遞增。

END{print 100*count/total} - 在所有行被解析後執行。 Percentage=count*100/total

+0

你能否請進一步解釋? – Alan

+0

Alan,我添加了一個解釋。 –

相關問題