Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫将9GB CSV拆分为2个5GB CSV_Python_Python 3.x_Csv_Pandas - Fatal编程技术网

Python 熊猫将9GB CSV拆分为2个5GB CSV

Python 熊猫将9GB CSV拆分为2个5GB CSV,python,python-3.x,csv,pandas,Python,Python 3.x,Csv,Pandas,我有一个9GB的CSV,需要将其拆分为2个5GB的CSV。 我开始是这样做的: for i, chunk in enumerate(pd.read_csv('csv_big_file2.csv',chunksize=100000)): chunk.drop('Unnamed: 0',axis=1,inplace=True) chunk.to_csv('chunk{}.csv'.format(i),index=False) 我需要做的是告诉pandas将区块写入CSV,直到CSV

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

for i, chunk in enumerate(pd.read_csv('csv_big_file2.csv',chunksize=100000)):
    chunk.drop('Unnamed: 0',axis=1,inplace=True)
    chunk.to_csv('chunk{}.csv'.format(i),index=False)
我需要做的是告诉pandas将区块写入CSV,直到CSV大小达到625000000或5GB,然后使用其余数据启动一个新的CSV文件,而无需从大CSV文件的数据开始重新启动

这能做到吗

提前谢谢

试试这个

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)

图书馆dask可能会有所帮助。您可以在这里找到文档:

解决方案有点混乱。但这应该根据您提到的~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

你是说60亿条记录还是600万条?如果我的计算结果与我所看到的数据相符的话,那是60亿条记录。但是如果更容易根据文件大小来计算,那对我也适用。你运气不好。Pandas不能在内存中保存那么多。它只能保存块的内存,直到它将其写入CSV。它只会以某种方式读取文件的大小,并确定该大小是否满足阈值。我将更新问题以反映这一点。不过,我不确定我是否理解以下内容:如果count@DanceParty2,我认为它们是相同的。count*chunkrows@DanceParty2首先在迭代开始时乘以0。他用未来的东西。不管怎样,我添加了我自己的除法器,它是这样工作的:对于文件中的块:if count