Pandas将9GB CSV分成2个5GB CSV

时间:2016-10-13 13:54:59

标签: python python-3.x csv pandas

我有一个9GB的CSV,需要将其拆分为2个5GB的CSV。 我开始这样做了:

stack install

我需要做的是以某种方式告诉pandas将块写入CSV,直到CSV达到6,250,000,000(或5GB的文件大小),然后用剩余的数据启动一个新的CSV文件(不再重新开始)从大CSV文件的数据开始。)

可以这样做吗?

提前致谢!

3 个答案:

答案 0 :(得分:2)

解决方案有点乱。但是这应该基于你提到的~60亿行阈值来分割数据。

import pandas as pd  
from __future__ import division

numrows = 6250000000 #number of rows threshold to be 5 GB
count = 0 #keep track of chunks
chunkrows = 100000 #read 100k rows at a time
df = pd.read_csv('csv_big_file2.csv', iterator=True, chunksize=chunkrows) 
for chunk in df: #for each 100k rows
    if count <= numrows/chunkrows: #if 5GB threshold has not been reached 
        outname = "csv_big_file2_1stHalf.csv"
    else:
        outname = "csv_big_file2_2ndHalf.csv"
    #append each output to same csv, using no header
    chunk.to_csv(outname, mode='a', header=None, index=None)
    count+=1

答案 1 :(得分:1)

图书馆dask可能会有所帮助。您可以在此处找到文档:http://dask.pydata.org/en/latest/dataframe-create.html

答案 2 :(得分:0)

试一试。

for i, chunk in enumerate(pd.read_csv('csv_big_file2.csv',chunksize=312500)):
    if i<11:
        chunk.to_csv(file_name, chunksize = 312500)
    else 
        chunk.to_csv(file_name_2, chunksize = 312500)