2016-05-23 7 views
0

Ich habe eine große CSV-Datei, die ich von dieser Website erhalten: https://data.baltimorecity.gov/Public-Safety/BPD-Part-1-Victim-Based-Crime-Data/wsfq-mvij.Konvertieren Sie bestimmte Spalten von CSV in Wörterbuch der Summen

Die Datei enthält Informationen über die Verbrechen, die in Baltimore passiert sind. Ich brauche eine Funktion, die alle CrimeDate Daten liest und fügt die Gesamt Vorfälle in jedem neuesten Stand zu bringen, so dass ich ein Wörterbuch wie diese bekommen können, zum Beispiel:

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

Beachten Sie, dass die Gesamt Vorfälle ein zufällig Nummer wählte ich nur um es als ein Beispiel zu verwenden.

Die Ausgabe muss das Datum und die Gesamtzahl der Vorfälle für jedes Datum haben. Ich weiß, wie man eine CSV-Datei in ein Wörterbuch umwandelt, aber da diese Datei sehr groß ist, dauert das Lesen sehr lange, daher möchte ich nur die Felder lesen, die ich brauche.

+0

Sie könnten die CSV in Pandas Dataframe laden und entfernen Sie die Spalten, die Sie nicht benötigen –

+0

Ich kann die CSV-Datei nicht ändern, muss es intakt bleiben. – Stagg

+0

Nicht was ich gesagt habe. Sie behalten Ihre CSV, aber laden Sie sie in einen Datenrahmen, und entfernen Sie Spalten aus dem Datenrahmen –

Antwort

3

Lesen Sie die CSV-Datei Zeile für Zeile und speichern Sie nur die gewünschten Teile in einer neuen Wörterbücherliste.

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

Edit: Da Ihre eigentliche Frage über war eine Spalte in Gruppen zusammenfassend, hier ist ein schöner Weg, es zu tun. (Ich habe auch Ihre Frage so bearbeitet, dass sie nach dem fragt, was Sie tatsächlich möchten.)

Dieser Code verwendet itertools.groupby, um jeden Satz von Datensätzen mit demselben Datum zu gruppieren, und nimmt dann die Summe von TotalIncidents für jede Gruppe an. Es hängt davon ab, dass die Datensätze nach Datum sortiert sind, sodass die Datensätze für jede Summe zusammen angezeigt werden.

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) 

Ich werde es Ihnen überlassen die endgültige Liste der Termine und Summen in eine Liste der Wörterbücher zu konvertieren, wenn das wirklich das, was Sie wollen.

+0

Es gibt mir TypeError: dict erwartet höchstens 1 Argumente, bekam 2 – Stagg

+0

Hoppla, vergessen Sie eine Reihe von Klammern, sorry! Fixed now – alexis

+0

Eigentlich erlaubt Python 2.7 "dict literals". Jetzt viel lesbarer. – alexis

Verwandte Themen