使用Python将最大值提取到输出文件

时间:2012-12-20 09:09:21

标签: python arrays list max dictionary

好的,在尝试自学了最佳方法之后,我已经搜索了这个具体的答案。我是python的新手,希望有人知道快速帮助我的方法!以下是输入数据文件的示例:

Lat,Long,Var,Id,日期时间
47.022,-104.330,10,MBVR,12/12/20 06: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/12/20 06:38:00
47.022,-104.330,12,MBVR,12/12/20 05:24:00

其余的可以倾倒。对于MCOM,最大id为13,对于MBVR,最大值为12.因此,如果有50个不同的站,我只需要返回50行,其中每个返回的50将是该站的最大“id”。我可以创建输出文件,但是如何获取每个站的最大ID数据,以及其他元素?我尝试使用字典,但我无法弄清楚如何返回整行,而不仅仅是最大值键和站名。 “日期时间”变量并不重要(就需要最近或第一次出现而言)。提前感谢您的帮助!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

当您遍历各行时,将max 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]