当数据帧中的行数增加一倍时,为什么数据帧内存使用率会增加一倍以上?

2024-04-19 18:40:58 发布

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

我正在用不同长度的文本语料库测试熊猫的记忆使用情况。内存使用是不一致的,我试图理解为什么。你知道吗

我有两个长度完全不同的文本语料库(yelp评论语料库:约600万字,英国国家语料库约1亿字)。我使用两个数据帧来存储和操作这些数据。两个语料库的形状和数据类型是相同的。在每个数据帧中,每行是一个单词,每列是关于该单词的元数据(例如,词性标记、引理、单词的文本id)。两个数据帧中所有列的数据类型都是category,因为所有值都是字符串,而且大多数值都是重复的。使用

dataframe.memory_usage(deep=True, index=True).sum()

pandas告诉我Yelp语料库占用了大约0.2gb,BNC占用了大约1.8gb。尽管BNC比yelp语料库大17倍,但它占用的内存却是yelp语料库的9倍。好吧,公平,语料库是不同的。它们没有直接的可比性。如果我将yelp语料库连接到BNC的末尾,并使用

pandas.concat([bnc, yelp]).astype('category')

我预计结果数据帧占用的内存将略少于2GB(1.8+0.2-开销和两个语料库中的重复类别级别),但实际上它占用了3.2GB。另外,如果我使用熊猫.海螺([yelp,yelp]),内存使用量增加到大约0.4gb。另一方面,如果使用相同的代码将BNC翻一番,内存使用量将增加到5.2gbs,几乎是原始语料库内存使用量的三倍。你知道吗

我读过pandas如何在内存中表示系列/数据帧,但我找不到任何解释。我也很抱歉,我不能提供链接到语料库,因为我没有权限分发它们。我希望有人能提供洞察力而不是代码。你知道吗


Tags: 数据记忆内存代码文本truepandas单词