为什么df.info()和df.dtypes.memory_usage(deep=True)结果之间存在差异?

2024-04-18 08:12:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试对两个相当大的数据集进行pd.merge,它们的形状是~a-(24482319,33)和B-(12029240165)。这会引发内存错误,尽管我有一个32 RAM、Core-i9、带2TB SSD的Dell XPS、内存操作中的熊猫。在优化数据类型之后,我尝试检查数据集各自的大小(使用df.info())和内存使用情况(df.dtypes.memory_usage(deep=True))。结果如下:

^{tb1}$

详情如下:

**A.info()**
-----------
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 24482319 entries, 0 to 24482318
Columns: 33 entries, MSISDN to GSM_DECILE
dtypes: category(9), datetime64[ns](3), float32(19), float64(1), object(1)
memory usage: 3.1+ GB

**B.info()**
-----------
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 12029240 entries, 0 to 12029239
Columns: 165 entries, MSISDN to MFS_DECILE
dtypes: category(6), datetime64[ns](4), float32(103), int16(25), int8(26), object(1)
memory usage: 6.0+ GB

我认为数据帧B是这里的罪魁祸首(即导致内存中的操作pd.merge失败),所以我的问题是:当A的大小仅为其2倍时,为什么B的内存使用率接近其边的6倍?如何减少内存使用

多谢各位


Tags: to数据内存coreinfopandasdfusage