2014-02-13 172 views
-2

確定文件「BoulderWeatherData.csv」中的平均和最大降雨量。已發現使用此代碼的平均值:在CSV文件中查找最大值

rain = open("BoulderWeatherData.csv", "r") 
    data = rain.readline() 
    print(rain) 
    data = rain.readlines() 
    total = 0 
    linecounter = 0 
    for rain in data: 
     linecounter = linecounter + 1 
     print("The number of lines is", linecounter) 

    for line in data: 
     r = line.split(",") 
     total = total + float(r[4]) 
    print(total) 


    average = float(total/linecounter) 
    print("The average rainfall is ", "%.2f" % average) 

但是,似乎無法使用此相同過程找到最大值。嘗試使用max,函數但必須獲得的答案是浮點數,不能通過迭代通過max

任何幫助,將不勝感激。

+0

可以給你的BoulderWeatherData.csv訪問? Dropbox鏈接似乎已經死亡。 – bmandesign

+0

我的歉意。重新上傳Dropbox鏈接。希望能解決它。 – user3308130

+5

@ user3308130 - 請粘貼您的csv的相關內容。不應該連接到外部代碼或文件,因爲(就像我們剛纔看到的那樣)它可能容易出現死鏈接或其他問題。 SO問題應該是獨立的。 – admdrew

回答

0
max=0 
for line in data: 
     r = line.split(",") 
     if float(r[4]) > max: 
      max=float(r[4]) 
print(max) 

類似的東西

-1

此代碼將嘗試找到最大值和平均值,存儲在一個.csv 5號位的花車。

rainval = [] 

初始化我們將存儲值的空數組。

with open ("BoulderWeatherData.csv", "r") as rain: 

打開.csv文件並將其命名爲「rain」。

for lines in rain: 

這會讀取雨中的每一行直到文件結束。

 rainval += [float(lines.strip().split(",")[4])] 

我們附加在行的第五個位置(第四個索引)找到的浮點值。

我們對位於.csv文件中的每一行重複上述操作。

print (sorted(rainval)[len(rainval)]) 

這樣排序rainval數組中的值,然後取最後(最大)值並打印出來。這是最大值,比max更好,因爲它可以處理浮點數而不僅僅是整數。

print (sum(rainval)/len(rainval)) 

這會打印平均降雨量。


另外,如果我們不想使用數組:

maxrain = -float("inf") 
total, count = 0, 0 
with open ("test.txt", "r") as rain: 
    for lines in rain: 
     temp = float(lines.strip().split(",")[4]) 
     if maxrain < temp: 
      maxrain = temp 
     total += temp 
     count += 1 

print (maxrain) 
print (total/count) 
+0

嗨,我的回答有什麼問題? – EducateMe

+2

'data []'是無效的Python。 '排序(雨)'只是返回一個新的排序列表,不以任何方式修改'rain'。 '雨[len(rain)]'保證是'IndexError'。你也錯過了冒號。您還使用文件對象'rain'來代替'data'。即使你修正了所有這些,你的算法也沒有任何意義 - 他需要按每行中的第4個元素排序,但是你試圖按照整個元素列表排序。然後你嘗試將這些列表總結爲數字。 – abarnert

+0

太棒了,感謝您的幫助!答案現在看起來如何? – EducateMe

0
import csv 

INPUT = "BoulderWeatherData.csv" 
PRECIP = 4 # 5th column 

with open(INPUT, "rU") as inf: 
    incsv = csv.reader(inf) 
    header = next(incsv, None) # skip header row 
    precip = [float(row[PRECIP]) for row in incsv] 

avg_precip = sum(precip, 0.)/(1 and len(precip)) # prevent div-by-0 
max_precip = max(precip) 

print(
    "Avg precip: {:0.3f} in/day, max precip: {:0.3f} in/day" 
    .format(avg_precip, max_precip) 
) 

回報

Avg precip: 0.055 in/day, max precip: 1.980 in/day 
0

你已經積累total跨越循環迭代。

爲了保持maxvalue的軌道,它基本上是同樣的事情,但不是增加你max荷蘭國際集團:

total = 0 
maxvalue = 0 

for line in data: 
    r = line.split(",") 
    value = float(r[4]) 
    total = total + value 
    maxvalue = max(maxvalue, value) 

print(total) 
print(maxvalue) 

或者,如果你不想使用max功能:

for line in data: 
    r = line.split(",") 
    value = float(r[4]) 
    total = total + value 
    if value > maxvalue: 
     maxvalue = value 
2

這是我首選的處理方式。

#!/usr/bin/env python3 

rain = open("BoulderWeatherData.csv","r") 

average = 0.0 
total = 0 
maxt = 0.0 

for line in rain: 
    try: 
     p = float(line.split(",")[4]) 
     average += p 
     total += 1 
     maxt = max(maxt,p) 
    except: 
     pass 

average = average/float(total) 

print("Average:",average) 
print("Maximum:",maxt) 

這將輸出:

Average: 0.05465272591486193 
Maximum: 1.98