python - 另一个 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
有什么想法可能导致这种情况吗?
解决方案
推荐阅读
- javascript - 执行某些js代码后,有没有办法从网站获取页面源?
- d3.js - 加载 csv 数据并将结果保存到变量
- python - 在 huggingface 的 pytorch-transformers 库中微调 GPT-2
- javascript - 如何检测给定路由的所有子组件都已在 Vue.js 中呈现?
- rxjs - 检索 Observable 订阅者并让他们订阅另一个 Observable
- machine-learning - RVL-CDIP 数据集
- apache - Mod rewrite - 即使常规文件存在,文件属性“-f”测试也会失败
- python - 如何编辑变量 Odoo
- thymeleaf - 百里香叶中第一个元素的附加属性
- postgresql - PostgreSQL Order BY 不同类型的数组