将csv的特定列转换为求和的字典

2024-06-26 14:16:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我从这个网站上得到了一个很大的csv文件:https://data.baltimorecity.gov/Public-Safety/BPD-Part-1-Victim-Based-Crime-Data/wsfq-mvij。你知道吗

这个文件包含了在巴尔的摩发生的犯罪的信息。 我需要一个函数来读取所有犯罪日期,并将每个日期的事件总数相加,这样我就可以得到这样一个字典,例如:

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

请注意,事件总数是我选择的一个随机数,只是为了举例说明。你知道吗

输出需要有日期,以及每个日期的事件总数。 我知道如何将csv文件转换为字典,但是由于这个文件非常大,读取它需要很长时间,所以我只想读取所需的字段。你知道吗


Tags: 文件csvhttpsdata字典网站事件public
1条回答
网友
1楼 · 发布于 2024-06-26 14:16:00

一次读取一行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)

如果你真的想要的话,我就让你把最后的日期和总数列表转换成字典列表。你知道吗

相关问题 更多 >