2017-06-12 5 views
0

Was ist der beste/einfachste Weg, um einen sehr großen Datenrahmen (50 GB) in mehrere Ausgaben (horizontal) aufzuteilen?Pandas Dataframe to_csv - Auf mehrere Ausgabedateien aufgeteilt

Ich dachte darüber nach, wie etwas zu tun:

stepsize = int(1e8) 
for id, i in enumerate(range(0,df.size,stepsize)): 
    start = i 
    end = i + stepsize-1 #neglect last row ... 
    df.ix[start:end].to_csv('/data/bs_'+str(id)+'.csv.out') 

Aber ich wette, es gibt eine intelligentere Lösung ist?

+0

I Ich denke, das ist wahrscheinlich der beste Weg, um das zu tun, was Sie gefragt haben ... aber ist es das, was Sie wirklich wollen? machen? CSV ist unglaublich ineffizient für Daten dieser Größe, sowohl hinsichtlich des belegten Speicherplatzes als auch der Lese-/Schreibgeschwindigkeit. Ich würde Sie ermutigen, ein geeigneteres Format zum Speichern eines so großen Datasets in Betracht zu ziehen, zum Beispiel [hdf5] (https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_hdf.html) . – jakevdp

+0

@jakevdp, danke für deinen Kommentar. Hdf5 oder was ich mag: bcolz sind viel bessere Formate, die du hast. manchmal wollen meine Geschäftspartner csvs ...: - / – PlagTag

Antwort

0

Ok, this Antwort brachte mich auf eine befriedigende Lösung

numpy.array_split mit (Objekt, number_of_chunks)

number_of_chunks = 10 
[df_i.to_csv('/data/bs_{id}.csv'.format(id=id)) for id, df_i in enumerate(np.array_split(df, number_of_chunks))] 

oder als for-Schleife:

for id, df_i in enumerate(np.array_split(df, number_of_chunks)): 
    # the `id` inside {} may be omitted, 
    # I also inserted the missing closing parenthesis 
    df_i.to_csv('/data/bs_{}.csv'.format(id=id)) 
Verwandte Themen