Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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 Pandas-导入大小为4GB的CSV文件时出现内存错误_Python_Python 3.x_Pandas - Fatal编程技术网

Python Pandas-导入大小为4GB的CSV文件时出现内存错误

Python Pandas-导入大小为4GB的CSV文件时出现内存错误,python,python-3.x,pandas,Python,Python 3.x,Pandas,我尝试使用pd.read_csv导入大小为4GB的csv文件,但收到内存不足的错误。然后尝试使用dask.dataframe,但无法转换为dask.dataframe(相同的内存错误) 然后尝试使用chunksize参数,但内存错误相同: import pandas as pd df = pd.read_csv(#file, chunksize=1000000, low_memory=False) df = pd.concat(df) 还尝试对列表使用chunksize,出现相同错误: imp

我尝试使用
pd.read_csv
导入大小为4GB的csv文件,但收到内存不足的错误。然后尝试使用
dask.dataframe
,但无法转换为
dask.dataframe
(相同的内存错误)

然后尝试使用
chunksize
参数,但内存错误相同:

import pandas as pd
df = pd.read_csv(#file, chunksize=1000000, low_memory=False)
df = pd.concat(df)
还尝试对列表使用
chunksize
,出现相同错误:

import pandas as pd
list = []
for chunk in pd.read_csv(#file, chunksize=1000000, low_memory=False)
    list.append(chunk)
df = pd.concat(list)
尝试:

  • 尝试使用文件大小1.5GB-已成功导入
  • 尝试使用文件大小4GB-失败(内存错误)
  • 尝试使用低
    chunksize
    (2000或50000)-失败(4GB文件内存错误)
  • 请让我知道如何进一步进行

    我使用python 3.7和RAM 8GB


    我也在RAM为128GB的服务器上尝试了3次,但仍然
    内存错误

    我无法分配
    dtype
    ,因为要导入的csv文件可能在不同的时间包含不同的列


    这里已经回答了:

    我还用2GB文件尝试了上述方法,效果很好

    还要尽量保持块的大小更小


    你也能分享一下你的系统配置吗?那会很有用的

    我只想记录下在得到足够的建议后我所做的尝试!感谢罗宾·内梅特和胡安帕

  • 正如juanpa所指出的,我能够在计算机中读取csv文件(4GB) 当我使用
    64位python
    可执行文件时,服务器具有128GB RAM

  • 正如罗宾指出的,即使使用64位可执行文件,我也无法 使用8GB RAM在本地计算机中读取csv文件(4GB)


  • 因此,无论我们尝试什么,机器的RAM都很重要,因为数据帧在内存中使用

    读取块,然后将其存储在列表
    列表中。追加(块)
    没有任何意义(因为列表占用了您的内存)。在加载下一个块之前,您需要在加载块时对其进行处理(删除、过滤或其他)。128gb服务器应该可以正常工作。我的猜测是有什么东西限制了你进程的内存(docker?)我不想(放弃它、过滤它,或者别的什么)块,我只想附加所有的块并用它构建一个完整的
    数据帧。我将使用整个
    dataframe
    使用
    GUI工具包进行过滤和聚合。假设你有一个能放100本书的书架(你的内存),你想放200本书。如果您
    读取不带chunksize的\u csv()
    。你一次拿了200本书放在那里——它们不合适。如果你设置了
    chunksize
    你一次拿10本书,把它们放在那里。10轮之后,书架上已经没有空间了,所以内存不足。“我也在一台RAM为128GB的服务器上尝试了3次,但仍然存在内存错误”,我发现这令人惊讶。您是否碰巧使用了32位版本的Python?那么这就是您的问题所在,您将无法访问超过32位的地址空间,因此最大4gb左右,尽管许多操作系统将其限制为更少。例如,windows上的限制是2GB。欢迎使用SO,Nischal!我建议您阅读OP下的评论。我们已经发现,降低块大小不会完成任何事情,128GB ram服务器的问题是由于OP使用32位Python造成的。
    import pandas as pd
    list = []
    for chunk in pd.read_csv(#file, chunksize=1000000, low_memory=False)
        list.append(chunk)
    df = pd.concat(list)