大文件读取问题

2024-04-26 11:47:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用以下代码读取中的13GBcsv文件:

chunks=pd.read_csv('filename.csv',chunksize=10000000)
df=pd.DataFrame()
%time df=pd.concat(chunks, ignore_index=True)

我已经使用了从10**3到10**7的chunksize参数值,但是每次我收到一个MemoryErrorcsv文件有大约330万行和1900列。你知道吗

我清楚地看到,在开始读取文件之前,我有30+GB的可用内存,但是我仍然得到MemoryError。我该怎么解决这个问题?你知道吗


Tags: 文件csv代码dataframedfreadindextime
1条回答
网友
1楼 · 发布于 2024-04-26 11:47:59

分块在您想读取文件中所有内容的情况下不起任何作用。chunk的全部目的是预处理块,这样您就只处理您感兴趣的数据(可能将处理过的块写入磁盘)。此外,您的块大小似乎大于数据中的行数,这意味着您正在一次性读取整个文件。你知道吗

按照@MaxU的建议,可以尝试使用稀疏数据帧,也可以使用较小的块大小(例如100k):

chunks = pd.read_csv('filename.csv', chunksize=100000)  # nrows=200000 to test given file size.
df = pd.concat([chunk.to_sparse(fill_value=0) for chunk in chunks])

您可能还想考虑像GraphLab Create这样的东西,它使用sframe(不受RAM限制)。你知道吗

相关问题 更多 >