【问题标题】:Python/Pandas - df.duplicated() MemoryError: cannot allocate memory for arrayPython/Pandas - df.duplicated() MemoryError:无法为数组分配内存
【发布时间】:2018-03-19 22:21:23
【问题描述】:

在 Python 3.6.4 中使用 df.duplicated() 检查数据框中的重复项时,我得到了一个 MemoryError: cannot allocate memory for array

df 有大约 150,000 行和 208 列,将数据加载到 df 中没有问题(使用下面的块)。

myList = []
for chunks in pd.read_csv(filename, header=0, low_memory=False, chunksize=20000):
        myList.append(chunks)

dfMain = pd.concat(myList, axis=0)
dfMain.index.name = 'Index'

print (dfMain.shape)
Out: (151982, 208)

到目前为止一切都很好。

   #Marks duplicated rows with TRUE or FALSE and put into a new df
    dfDup1 = pd.DataFrame(dfMain.duplicated(keep=False)) #set to False to view all duplicates

这是发生错误的地方:MemoryError: cannot allocate memory for array 并且脚本停止。

不幸的是,减少列数不是一种选择,我需要检查所有变量中的重复项(尽管我确实删除了 150 个变量进行测试,但问题仍然存在)。而且我确实需要将重复的值导出到 df/csv,所以在这个阶段不能使用drop_duplicates()

计算机有大量 RAM(64 gigs),但 Python/pandas 只使用了其中的一小部分。

任何帮助将不胜感激。

【问题讨论】:

  • 您是否检查过是否有足够的内存来制作 df 的副本? (我认为 应该 存在,但这可以排除一些不太可能但易于修复的问题,例如“哎呀,我正在运行 32 位 Python”。)
  • @abarnert - 有足够的硬盘空间,但刚刚检查过 - 这台计算机正在运行 32 位 Python。计算机在几周前被重新格式化,不知何故最终变成了 32 位版本。易于修复和忽略!谢谢,将安装 64 位并重试。
  • 哈,这就是为什么我总是测试那些不可能出错的愚蠢的东西,除非我是个白痴——因为有一半的时间,我是个白痴。 :)
  • (另外,我注意到您的 df 似乎应该占用 2GB 左右,这对于 64GB 的 RAM 不会有问题……除了 32 位 Python 只能访问 2- 4GB 的 RAM。)
  • 再次感谢,abrnert!刚刚重新安装了 64 位,效果很好。

标签: python python-3.x pandas memory


【解决方案1】:

这里的问题是使用 Python 32 位而不是 64 位。感谢 abrnert 帮助解决此问题。

【讨论】:

    猜你喜欢
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2017-03-28
    • 2021-12-02
    • 1970-01-01
    • 2019-11-17
    相关资源
    最近更新 更多