2016-05-23 52 views
0

我有一個很大的csv文件,我從這個網站獲得:https://data.baltimorecity.gov/Public-Safety/BPD-Part-1-Victim-Based-Crime-Data/wsfq-mvij將某些csv列轉換爲彙總字典

該文件包含在巴爾的摩發生的犯罪的信息。 我需要一個函數讀取所有CrimeDate日期,並在每個日期加起來的總事件,讓我能得到這樣一本字典,例如:

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

注意,總事件是隨機我選擇的號碼只是爲了將其用作示例。

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

+0

您可以將CSV加載到熊貓數據框中,並刪除不需要的列 –

+0

我無法更改CSV文件,它必須保持不變。 – Stagg

+0

不是我說的。你保留你的CSV,但加載到一個數據幀,並從數據幀中刪除列 –

回答

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) 

如果這真的是你想要的,我會讓你把日期和總和的最終列表轉換成字典列表。

+0

它給了我TypeError:字典最多1個參數,得到2 – Stagg

+0

糟糕,忘了一組括號,對不起!現在修復了 – alexis

+0

其實Python 2.7允許「字典文字」。現在更可讀。 – alexis