首页 > 解决方案 > 另一个 pandas .drop 内存泄漏

问题描述

问题

我正在研究 Kaggle 内核,只需删除一些 Pandas DataFrame 行会使 RAM 使用率加倍。我看过相关的问题,例如

删除数据框列时熊猫中的内存泄漏?

如何释放熊猫数据框使用的内存?

但是,那里提出的解决方案都不适合我。我想知道我是否缺少一些更基本的东西?

代码

在有问题的转换之前,的输出psutil.test()

USER         PID  %MEM     VSZ     RSS  NICE STATUS  START   TIME  CMDLINE
root           1   0.0   11.4M    3.0M        sleep  13:25  00:00  /bin/bash -c 
root          10   0.7  778.8M  125.0M        sleep  13:25  00:05  /opt/conda/bi
root          45   8.5    2.9G    1.5G        runni  13:26  00:39  /opt/conda/bi

运行非常简单的单元格后

cond = (some condition)
bad_rows = np.where(~cond)[0]
X_train = X_train.drop(index=bad_rows)

我重新运行测试并获得

USER         PID  %MEM     VSZ     RSS  NICE STATUS  START   TIME  CMDLINE
root           1   0.0   11.4M    2.9M        sleep  13:36  00:01  /bin/bash -c 
root          10   0.7  778.8M  125.0M        runni  13:36  00:06  /opt/conda/bi
root          45  18.2    4.6G    3.2G        runni  13:36  00:48  /opt/conda/bi

由于 bad_rows 中的行数相对较少,因此 DataFrame 本身的内存使用量没有变化(1.1GB),但是系统 RAM 使用量增加了一倍!

尝试

我试图就地放置,运行垃圾收集,但无济于事。我还尝试分配给不同的变量,如下所示:

X_train2 = X_train.drop(index=bad_rows)

其次是del X_train(以及单独不起作用X_train = []时),但似乎没有什么可以释放空间。del顺便说一句,运行最后一个代码片段会产生另一个奇怪的效果(至少对我来说),即

X_train: 1.7 GB
X_train2: 1.1 GB

有什么想法可能导致这种情况吗?

标签: pythonpandasmemory-leakskaggle

解决方案


推荐阅读