2016-11-29 9 views
0

Ich habe eine große CSV-Datei (1 Million + Zeilen) mit Daten entlang der Linien vonPandas Format CSV-Daten basierend auf Schlüssel

s, p, o 
4931958, type,   CNV 
4931958, sample_id,  683665 
4931958, primary_Site, haematopoietic_and_lymphoid_tissue 
4931958, site_subtype, NS 

Mein Endergebnis ist, die Daten in json entlang Größen wie

zu formatieren
{ 
    "name": 4931958, 
    "type": "CNV", 
    "sample_id": "683665", 
    "site_subtype": "NS" 
} 

Ich habe dies mit regulären Python-Schleifen und es dauerte 4 Stunden zu laufen. Ich suche Python Pandas, um dabei zu helfen. Mein Problem hier ist, dass die Pandas-Dokumente ausschließlich auf mathematischen Gleichungen basieren. Ich lese derzeit in der CSV und groupby verwenden, um meine Daten durch s oben zu organisieren, aber dann wie füge ich die verbleibenden Spalten in das Format, das ich wollte.

Ich begann ursprünglich ein list von dicts

lst = [] 
for row in df.itertuples(): 
    lst.append({"name": row[1], row[2]: row[3]}) 

zu schaffen und dann einen neuen Datenrahmen zu schaffen, basierend auf dieser Liste aber ich bin in die gleiche Ausgabe läuft der die Zeilen des Datenrahmen verschmelzen.

Antwort

1

Versuchen Sie DataFrame.pivot().

Pivot und Gruppe auf 's', die der neue Index wird:

df_pivoted = df.pivot(index='s',columns='p', values='o') 

Fügen Sie den Index als neue Spalte:

df_pivoted['name'] = df_pivoted.index 

Ausgabe als JSON in 'Aufzeichnungen' Format:

JSON-Datei sollte wie folgt aussehen:

[{"primary_Site":"haematopoietic_and_lymphoid_tissue","sample_id":"683665","site_subtype":"NS","type":"CNV","name":4931958}] 
+0

Ich gebe dir heute Morgen einen Versuch. Danke – Craicerjack

+0

Brilliant. Vielen Dank. Ich muss wirklich Pandas richtig lernen, aber nach einem engen Zeitplan ... – Craicerjack

Verwandte Themen