我正在研究 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
任何想法可能导致这种情况?