2017-06-12 60 views
0

將大型數據幀(50GB)拆分爲多個輸出(水平)的最佳/最簡單的方法是什麼?熊貓數據幀to_csv - 分成多個輸出文件

我想過做這樣的事情:

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') 

但我敢打賭,有一個聰明的解決辦法了嗎?

+0

我認爲這可能是做你所問的最好的方式......但是這真的是你想要的去做?對於這種大小的數據,CSV的效率非常低,無論是使用的磁盤空間量還是讀/寫速度。我鼓勵你考慮一個更合適的格式來保存這樣一個大型數據集,例如[hdf5](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_hdf.html) 。 – jakevdp

+0

@jakevdp,感謝您的評論。 Hdf5或我喜歡的:bcolz是更好的格式,你的是正確的。有時我的商業夥伴想要csvs ...: - / – PlagTag

回答

0

好吧,this答案給我帶來了使用

numpy.array_split

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))] 

一個令人滿意的解決方案(對象,number_of_chunks)或for循環:

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))