小编Dan*_*ler的帖子

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

我正在使用不同长度的文本语料库测试 pandas 内存使用情况。内存使用不一致,我试图理解原因。

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

dataframe.memory_usage(deep=True, index=True).sum()
Run Code Online (Sandbox Code Playgroud)

pandas 告诉我 Yelp 语料库占用约 0.2 GB,BNC 占用约 1.8 GB。尽管 BNC 大约比 yelp 语料库大 17 倍,但它占用的内存却是前者的 9 倍。好吧,公平地说,语料库是不同的。它们没有直接可比性。如果我将 yelp 语料库连接到 BNC 的末尾并使用重新调整分类变量

pandas.concat([bnc, yelp]).astype('category')
Run Code Online (Sandbox Code Playgroud)

我预计生成的数据帧会占用略小于 2 GB 的内存(1.8 + 0.2 - 两个语料库中的开销和重复的类别级别),但它实际上占用了 3.2 GB。此外,如果我使用 pandas.concat([yelp, yelp]) 将 yelp 语料库加倍,内存使用量会增加到大约 0.4 GB。另一方面,如果我使用相同的代码将 BNC 加倍,内存使用量会增加到 5.2 GB,几乎是原始语料库内存使用量的三倍。

我已经阅读了 pandas 如何在内存中表示系列/数据帧,但我找不到任何解释这一点的内容。我还很遗憾地说,我无法提供该语料库的链接,因为我无权分发它们。我希望有人能够提供见解而不是代码。

python nlp pandas

5
推荐指数
0
解决办法
359
查看次数

标签 统计

nlp ×1

pandas ×1

python ×1