簡體   English   中英

將csv的某些列轉換為和字典

[英]Convert certain columns of csv into dictionary of sums

我有一個很大的csv文件,該文件是從該網站獲得的: https : //data.baltimorecity.gov/Public-Safety/BPD-Part-1-Victim-Based-Crime-Data/wsfq-mvij

該文件包含巴爾的摩發生的罪行的信息。 我需要一個函數來讀取所有CrimeDate日期,並在每個日期中合計“事件總數”,以便獲得這樣的字典,例如:

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

請注意,“事件總數”是我選擇的一個隨機數,僅用作示例。

輸出中需要有日期,以及每個日期的事件總數。 我知道如何將csv文件轉換為字典,但是由於此文件很大,因此讀取時間很長,所以我只想讀取所需的字段。

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

如果您確實需要,我將把最終的日期和總和列表轉換成字典列表,留給您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM