2012-12-20 17 views
0

好吧,我試圖教自己什麼是最好的方式來搜索這個具體的答案。我是python的新手,希望有人知道快速幫助我的方法!下面是輸入數據文件的例子:使用Python將最大值拉出到輸出文件

緯度,經度,VAR,編號,日期時間
47.022,-104.330,10,MBVR 12 /二十零分之一十二六點36分00秒
47.022, - 104,330,11,MBVR,12/12/20 06:26:00
48.810,-104.253,10,MCOM,12/12/20 06:41:00
48.810,-104.253,13,MCOM,12/12/20 06:38:00
48.810,-104.253,12,MCOM,12/12/20 06:48:00
47.022,-104.330,11,MBVR,12/12/20 05:17:00
47.022,-104.330,10,MBVR,12/12/20 05:34:00
47.022,-104.330,12,MBVR,12/12/20 05:24:00

該文件可以有許多不同的id,這只是一個示例。我將程序放在攝取數據並分離出來,然後編寫輸出文件。這裏是我的代碼的一部分:

csv_max = 'X:\\csv\\lsrwnd.dat' 
my_file = open(csv_max, "rb") 
rowadd = my_file.next() 
for line in my_file: 
    items = line.split(",") 
    coords = items[0:2] 
    wind = items[2] 
    station = items[3] 
    timestamp = items[4] 

因此,這裏是從這個角度我的問題。我需要做的是創建一個只包含「id」列最大值的輸出文件。因此,如果重複「站」,我需要程序遍歷該站的每次出現,找到最大「id」,並且僅返回每個「站」的最大值「id」的行。從上面的數據例子中,所有我想要的是:

48.810,-104.253,13,MCOM,第12 /二十零分之十二6點38分00秒
47.022,-104.330,12,MBVR,第12 /20分之12 05:24:00

其餘的可以傾倒。對於MCOM,最大ID爲13,MBVR最大爲12.所以如果有50個不同的站,我只需要返回50行,每個返回的50就是該站的最大「id」。我可以創建輸出文件,但是如何獲得每個站的最大id數據以及其他元素?我嘗試使用字典,但我很難找出如何返回整個行,而不是隻有最大值鍵和電臺名稱。 「日期時間」變量不重要(根據需要最近或首次出現)。預先感謝您的幫助!

+0

你實際上是在尋找最大的「Var」,例如。 13,不是最大的「Id」,例如。 「MBCOM」? –

+0

對不起,是的,我感到困惑。該id是電臺ID,var是變量。感謝您接收那 – user1530884

回答

1
import csv 
d = {} 
with open('input.csv', 'r') as f: 
    csvr = csv.DictReader(f) 
    for rec in csvr: 
     if rec['Id'] not in d or int(rec['Var']) > int(d[rec['Id']]['Var']): 
      d[rec['Id']] = rec 
with open('output.csv', 'w') as f: 
    csvw = csv.DictWriter(f, fieldnames=csvr.fieldnames) 
    csvw.writeheader() 
    csvw.writerows(d.itervalues()) 

的output.csv文件現在看起來是這樣的:

Lat,Long,Var,Id,Date Time 
48.810,-104.253,13,MCOM,12/12/20 06:38:00 
47.022,-104.330,12,MBVR,12/12/20 05:24:00 
+0

正是我需要的。謝謝!有沒有什麼地方可以推薦您閱讀這樣的內容?我正努力學習更多,以防萬一有些事情在我的程序中肆虐。再次感謝你! – user1530884

+2

所有你需要的是http://docs.python.org –

0

當你通過你的線條迭代,最大ID值存儲在一個名爲字典max_stations。

csv_max = 'X:\\csv\\lsrwnd.dat' 
my_file = open(csv_max, "rb") 
rowadd = my_file.next() 
max_stations = {} 
for line in my_file: 
    items = line.split(",") 
    coords = items[0:2] 
    wind = items[2] 
    station = items[3] 

    try: 
     current_wind = max_stations[station] 
    except IndexError: 
     current_wind = wind 
    max_wind = wind if wind >= current_wind else current_wind 

    max_stations[station] = max_wind 
    timestamp = items[4]