2016-04-11 5 views
0

Ich habe einen Datenrahmen, df, die wie folgt aussieht:Iterative Erstellung von CSV-Dateien, die von Serie in Pandas

Site Roadname Count id Count_norm 
9 A316 Twickenham Rd, Richmond 1474 9SOUTHBOUND 1428 
9 A316 Twickenham Rd, Richmond 1375 9SOUTHBOUND 1329 
9 A316 Twickenham Rd, Richmond 1052 9SOUTHBOUND 1006 
9 A316 Twickenham Rd, Richmond 986  9SOUTHBOUND 940 
9 A316 Twickenham Rd, Richmond 1071 9SOUTHBOUND 1025 
9 A316 Twickenham Rd, Richmond 1206 9SOUTHBOUND 1160 
9 A316 Twickenham Rd, Richmond 1474 9NORTHBOUND 1428 
9 A316 Twickenham Rd, Richmond 1375 9NORTHBOUND 1329 
9 A316 Twickenham Rd, Richmond 1052 9NORTHBOUND 1006 
9 A316 Twickenham Rd, Richmond 986  9NORTHBOUND 940 
9 A316 Twickenham Rd, Richmond 1071 9NORTHBOUND 1025 
9 A316 Twickenham Rd, Richmond 1206 9NORTHBOUND 1160 

ich durch eine Reihe separater csv die erstellen können:

11N_series = results[results.id == "11NORTHBOUND"] 
11N_series.to_csv('./11NORTHBOUND.csv') 

Dies erfordert jedoch ich, um den Namen jeder Serie zu definieren (id)

Wie kann ich durch df Datenrahmen iterieren und eine CSV perexportieren?

ich die Zählung pro-ID und den Namen von sehen:

[in] id_count = results.groupby(["id"]).size() 
print(id_count) 

[out] 
id 
11NORTHBOUND 467 
11SOUTHBOUND 467 
15NORTHBOUND 467 
+1

Nach Gruppierung Sie Gruppen aufrufen können zurückkehren ein dict von der Gruppen und dann "get_group" für eine bestimmte Gruppe wird ein df-Schlüssel für diese Gruppe zurückgeben siehe: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.groups.html# pandas.core.groupby.GroupBy.groups und http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.get_group.html#pandas.core.groupby.GroupBy.get _group – EdChum

Antwort

2

Hier ist eine Art und Weise, es zu tun:

import pandas as pd 
from StringIO import StringIO 

st = """ 
Site|Roadname|Count|id|Count_norm 
9|A316 Twickenham Rd, Richmond|1474|9SOUTHBOUND|1428 
9|A316 Twickenham Rd, Richmond|1375|9SOUTHBOUND|1329 
9|A316 Twickenham Rd, Richmond|1052|9SOUTHBOUND|1006 
9|A316 Twickenham Rd, Richmond|986|9SOUTHBOUND|940 
9|A316 Twickenham Rd, Richmond|1071|9SOUTHBOUND|1025 
9|A316 Twickenham Rd, Richmond|1206|9SOUTHBOUND|1160 
9|A316 Twickenham Rd, Richmond|1474|9NORTHBOUND|1428 
9|A316 Twickenham Rd, Richmond|1375|9NORTHBOUND|1329 
9|A316 Twickenham Rd, Richmond|1052|9NORTHBOUND|1006 
9|A316 Twickenham Rd, Richmond|986|9NORTHBOUND|940 
9|A316 Twickenham Rd, Richmond|1071|9NORTHBOUND|1025 
9|A316 Twickenham Rd, Richmond|1206|9NORTHBOUND|1160 
""" 

data = pd.read_csv(StringIO(st), delimiter="|", error_bad_lines=False) 

#get a list of unique ids 
ids = pd.unique(data["id"].values.ravel()) 

grouped_data = data.groupby("id") 
for id in ids: 
    #get the dataframe for the current id 
    df = grouped_data.get_group(id) 
    #export current id's dataframe to a csv file with its name 
    df.to_csv(str(id)+".csv", sep="|", index=False) 
+0

Danke! Ich sollte darauf hinweisen, dass für csv das Trennzeichen "," nicht "|" sein sollte. – LearningSlowly

Verwandte Themen