python - 创建熊猫数据框会产生巨大的系列
问题描述
我正在使用SummaryTracker
from pympler.tracker
。我试图弄清楚为什么我的脚本被杀死了,尽管我的代码中的数据帧不应该超过大约。0,4gb,因为我有一个形状为18125×35232的矩阵(如果该数字不正确,我可以更改它),并且在创建此数据框时 pandas Series 存在于我不太了解的 RAM 中。现在我正在使用跟踪器来跟踪哪些对象使我的脚本停止,这是添加 df 之前的结果:
types | # objects | total size
======================================== | =========== | ============
pandas.core.frame.DataFrame | 2 | 79.57 MB
pandas.core.indexes.base.Index | 3 | 1.60 MB
list | 14620 | 1.35 MB
str | 17814 | 1.25 MB
pandas._libs.index.ObjectEngine | 2 | 640.20 KB
numpy.ndarray | 17 | 145.17 KB
set | 3 | 132.66 KB
int | 3316 | 90.70 KB
pandas.core.series.Series | 1 | 20.15 KB
pandas.core.indexes.numeric.Int64Index | 1 | 20.02 KB
weakref | 101 | 7.89 KB
dict | 22 | 5.85 KB
type | 0 | 1.82 KB
pandas._libs.internals.BlockPlacement | 4 | 320 B
code | 2 | 288 B
运行此代码后:
import pandas as pd
data = pd.read_csv('../test_data/test.csv',
sep=';', encoding=data_encoding)
data = data.pivot_table(index='index_name',
columns='col_name',
values='col_2')
结果如下所示:
types | # objects | total size
=================================================== | =========== | ============
pandas.core.frame.DataFrame | 3 | 2.92 GB
pandas.core.series.Series | 723 | 1.15 GB
list | 29950 | 2.74 MB
str | 33151 | 2.33 MB
pandas.core.indexes.base.Index | 3 | 1.60 MB
pandas.core.indexes.numeric.Int64Index | 3 | 966.09 KB
numpy.ndarray | 745 | 706.70 KB
pandas._libs.index.ObjectEngine | 3 | 660.23 KB
dict | 1494 | 329.34 KB
int | 7374 | 201.73 KB
set | 3 | 137.16 KB
pandas.core.internals.managers.SingleBlockManager | 723 | 84.73 KB
tuple | 1346 | 76.71 KB
pandas._libs.internals.BlockPlacement | 727 | 56.80 KB
pandas.core.internals.blocks.FloatBlock | 725 | 56.64 KB
我知道我需要更多空间来存储数据帧,但我没有在这段代码中创建系列,我想知道为什么 pandas.series 对象会阻止 1.15gb。这是内存泄漏吗?如果是,我该如何解决?如果没有,我可以以某种方式优化我的代码,以免发生这种情况吗?还是熊猫在创建数据框时的正常行为?在此之后,我将两个数据帧相互连接起来,5.69gb
被pandas.series
.
解决方案
推荐阅读
- python - 如何汇总数据框中的条目?
- java - 带有自定义 @Query 注释的 Spring-Data 弹性搜索存储库计数不起作用“预期 1,但找到 30 个结果”
- c# - 如果窗口靠近右下角,GetWindowRect 返回错误值
- regex - 如何在数组公式中进行多次搜索?
- verilog - 如何在 Synopsys VCS 中将比特爆破信号转储到 vcd
- python - 带有装饰器的 Python 客户端身份验证
- mysql - 提高此查询的效率:使用联接和子查询进行更新
- python - 数据库表不是 JSON 可序列化的
- java - 我们如何通过不完整的名称找到产品或类别?
- php - 试图获取非对象 WordPress 的属性“ID”