【发布时间】:2018-03-07 16:42:18
【问题描述】:
我知道之前有人问过与内存错误相关的问题,例如 here、here、here、here 或 here。建议的解决方案始终是切换到 Python 3 和/或 Window 64 位,或者在代码错误的情况下修复代码。但是,我已经在 Python 3 和 Win 64 上。我还可以从 Windows 任务管理器中看到,当 Python 抛出内存错误时,我的 64GB 内存中仍有几 GB 可用。
我有大约 15 个日期索引的 pandas 数据帧,每个数据帧有 14000 行,平均 5000 列浮点数据,以及大约 40-50% 的 NaN 值,我从硬盘读取。我不能简单地删除 NaN,因为不同的列在不同的日期有 NaN。当我尝试将它们与pd.concat() 连接时发生内存错误。所以这不是一些错误代码或while循环的问题。如果我将某些数据帧排除在串联之外,则串联中不会发生内存错误,但是当我尝试对串联数据进行 Scikit 学习决策树分析时,就会发生这种情况。
我的问题是如何让 Python 使用所有可用内存而不抛出内存错误?
【问题讨论】:
-
您没有提供证据证明您在 64 位 Windows 上使用了 64 位版本的 Python。请张贴任务管理器的截图,我们可以看到你的python实际上是64位的。
-
当您谈论 PC 中的 RAM 时,这就是物理内存。但是 Python 用完了虚拟内存。
-
@ThomasWeller,我添加了截图。坦率地说,我不在乎它用完了什么类型的内存。我只需要阻止它:-)
-
如果你不在乎,你会测量错误的值。在屏幕截图中显示:可用虚拟内存 25 GB。如果您将 15 个表*14000 行*5000 列的 4 字节浮点数加载到内存中,则至少约为 4.2 GB,不考虑任何开销。现在,如果将第一个表与第二个表结合起来,它将需要 2*280=560 MB。然后将它与下一个表结合起来:840 MB,然后是 1.1 Gb 等等……直到最后一个表是 4.2 GB。总结一下,它将是约 8 GB 加上原来的 4.2 GB,所以它是 12 GB。 Panda 很容易有 100% 的开销,所以是 24 GB(我知道其他库有 700% 的开销)。
-
@ThomasWeller,谢谢。那很有启发性。如果我从 Windows 性能管理中增加虚拟内存大小,它会解决问题吗?
标签: python windows python-3.x memory-management