【问题标题】:Memory Error Python 64bits内存错误 Python 64 位
【发布时间】:2016-05-10 10:11:18
【问题描述】:

尝试对 Pandas 数据帧进行排序然后将其保存到磁盘时,我在 Python 上遇到“内存错误”。

df = pd.read_hdf('big_df_file.h5')
df.sort_values(by='opt',inplace=True,kind='quicksort')
df.to_hdf('sorted.h5')

我的电脑有 16 Gbs 的 RAM,数据文件是 8 Gb。我不应该能够做到这一点而不会出现“内存错误”吗?

附:我使用的是快速排序,因为它是分配更少内存的排序算法。

Versions:
python: 2.7.11.final.0
python-bits: 64
OS: Windows
OS-release: 10
machine: AMD64
processor: Intel64 Family 6 Model 94 Stepping 3, GenuineIntel
byteorder: little
LC_ALL: None
LANG: en_GB

pandas: 0.17.1

【问题讨论】:

  • 什么时候你会收到MemoryError?您确定它在排序期间而不是在加载数据时给您错误吗?
  • @Bakuriu 我放置了一些print 语句,排序时出现错误。
  • numpy.sort 的文档指出,对除最后一个轴之外的任何轴进行排序可能会创建数据的临时副本。但是使用普通的numpy 我看不到内存有任何大的变化。事实上,即使使用mergesort,我也看不到内存使用量的真正变化。

标签: python pandas sorting bigdata


【解决方案1】:

我们需要更多信息,MemoryError 在什么阶段被调用?加载什么类型的数据?执行排序确实需要多少?

不过我会尽量解决这个问题。

如果在 read_hdf 期间调用错误,我建议可能限制您从文件加载的列数,例如,仅加载索引列(或通过行枚举推断)、值列并执行排序。之后,您可以(也许)将新数据增量写入文件。

更“硬核”的方法是分而治之(二进制排序算法,如归并排序),只加载文件的一半(或四分之一,你决定什么最有效,根据docs 这是可以通过传递 start 和 stop 参数)并执行选择的排序算法(合并排序或外部排序)。

this answer提供了有关一般问题的更多信息

【讨论】:

    猜你喜欢
    • 2018-04-29
    • 2019-01-31
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 2013-08-19
    相关资源
    最近更新 更多