好的,在尝试自学了最佳方法之后,我已经搜索了这个具体的答案。我是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数据,以及其他元素?我尝试使用字典,但我无法弄清楚如何返回整行,而不仅仅是最大值键和站名。 “日期时间”变量并不重要(就需要最近或第一次出现而言)。提前感谢您的帮助!
答案 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]