【问题标题】:Custom pivot function causing high page fault rate and handles自定义数据透视函数导致高页面错误率和句柄
【发布时间】:2019-07-10 15:21:38
【问题描述】:

我有一个大约 1700 万行和 7 列的(大)数据框,我想根据两个唯一列转置(枢轴)。由于内存限制,我无法使用pandas.pivot_table 函数。因此,我试图创建自己的一段代码,逐行转置这个数据帧。代码可以查看:https://bpaste.net/show/xRyQ

不幸的是,一段时间后,我的页面错误率和句柄数开始急剧增加。此外,我的非分页内存基本上为零。目前我不确定这是否是由于内存泄漏,或者这基本上是由于我的“新的、旋转的数据帧”的大小增加并因此消耗了内存。

因此,我的两个核心问题是:

  • 我观察到的确切原因是什么?这是由于内存泄漏,还是由于数据帧大小的增长?
  • 我可以对我的 Python 代码进行哪些更改/改进来解决这些内存问题/加快我的解决方案?例如会Dask 库对数据进行分区是一种选择吗?我宁愿不对我的硬件规格进行任何更改。

我的硬件规格是:

  • 16 GB 内存
  • 8 个 CPU 内核,Intel i7-6700 (3.4 GHz)
  • Windows 7,64 位

提前谢谢您,如果您有任何其他问题,请告诉我:)

【问题讨论】:

  • 因为您提前知道了 pivot_df 的大小,所以最好预先分配整个 pivot_df 然后填充行而不是逐行追加导致每次复制数据帧的行(请参阅stackoverflow.com/a/24913075/3944322)
  • @Stef,非常感谢。如果您愿意,可以将此作为答案提交,我会立即接受。我没有附加到pandas.DataFrame,而是创建了一个字典列表(每个字典代表一行),最终将其转换为pandas.DataFrame。这大大加快了速度。

标签: python pandas memory memory-management pandas-groupby


【解决方案1】:

由于您事先知道pivot_df 的大小,最好预先分配整个 pivot_df 然后填充行而不是逐行追加导致每次复制数据帧的行(另请参阅@ 987654321@).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 2023-02-03
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    相关资源
    最近更新 更多