我正在用不同长度的文本语料库测试熊猫的内存使用情况。内存使用情况不一致,我试图了解原因。
我有两个长度截然不同的文本语料库(一组yelp评论语料库:〜600万个单词-和英国国家语料库〜1亿个单词)。我正在使用两个熊猫数据框来存储和处理这些数据。两个语料库的形状和数据类型相同。在每个数据帧中,每一行是一个单词,每一列是关于该单词的一段元数据(例如,词性标记,引理,单词的文本ID)。两个数据框中所有列的数据类型均为类别,因为所有值均为字符串,并且大多数重复。使用
dataframe.memory_usage(deep=True, index=True).sum()
pandas告诉我Yelp语料库约占0.2 GB,而BNC约占1.8 GB。即使BNC比yelp语料库大17倍,它占用的内存也是9倍。好吧,公平,语料是不同的。它们不是直接可比的。如果我将yelp语料库连接到BNC的末尾,并使用
重新分级分类变量pandas.concat([bnc, yelp]).astype('category')
我希望生成的数据帧占用的内存少于2 GB(1.8 + 0.2-开销和两个语料库中重复的类别级别),但实际上占用3.2 GB。另外,如果我使用pandas.concat([yelp,yelp])将yelp语料库加倍,则内存使用量将增加到约0.4 GB。另一方面,如果我使用相同的代码将BNC加倍,则内存使用量将增加到5.2 GB,几乎是原始语料库的内存使用量的三倍。
我已经阅读了有关熊猫如何表示内存中的系列/数据帧的信息,但是我找不到任何解释。我也很遗憾地说,由于我无权分发这些语料库,因此无法提供该语料库的链接。我希望有人能提供见识而不是代码。