将某些csv列转换为sums字典

时间:2016-05-23 12:25:50

标签: python python-2.7 csv dictionary bigdata

我有一个很大的csv文件,我从这个网站获得:https://data.baltimorecity.gov/Public-Safety/BPD-Part-1-Victim-Based-Crime-Data/wsfq-mvij

该文件包含巴尔的摩发生的犯罪信息。 我需要一个读取所有CrimeDate日期的函数,并在每个日期中累计Total Thidents,这样我就可以得到这样的字典,例如:

[{CrimeDate: 05/14/2016, Total Incidents: 50}, {CrimeDate: 05/13/2016, Total Incidents: 67}.........]

请注意,“总突发事件”是我选择的随机数,仅作为示例使用。

输出需要包含日期和每个日期的事件总数。 我知道如何将csv文件转换为字典,但由于这个文件很大,所以阅读需要很长时间,所以我只想阅读我需要的字段。

1 个答案:

答案 0 :(得分:3)

一次读取一行csv文件,并在新的词典列表中仅保存所需的部分。

with open('eggs.csv') as csvfile:
    myreader = csv.DictReader(csvfile)
    mydata = [ {"CrimeDate": row["CrimeDate"], "Total Incidents": row["Total Incidents"]}
               for row in myreader ]

编辑:由于您真正的问题是如何在群组中总结一个列,这是一个很好的方法。 (我还编辑了你的问题,以便它询问你真正想要的东西。)

此代码使用itertools.groupby对具有相同日期的每组记录进行分组,然后为每个组获取TotalIncidents的总和。它取决于按日期排序的记录,以便每个总和的记录一起出现。

with open('eggs.csv') as csvfile:
    myreader = csv.DictReader(csvfile)
    grouped_rows = itertools.groupby(myreader, lambda r: r["CrimeDate"])
    totals = list((date, sum(int(r["TotalIncidents"]) for r in grp) 
                  for date, grp in grouped_rows)

print(totals)

我会留给你把最后的日期和总和列表转换成字典列表,如果这真的是你想要的那样。

相关问题