【发布时间】: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