另一个熊猫 .drop 内存泄漏

时间:2021-06-24 13:54:24

标签: python pandas memory-leaks kaggle

问题

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

Memory leak in pandas when dropping dataframe column?

How do I release memory used by a pandas dataframe?

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

代码

在有问题的转换之前,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

任何想法可能导致这种情况?

0 个答案:

没有答案