我正在使用Pandas数据框,这个数据框不小,但可以说是巨大的。我的程序计算单词的出现次数,然后我想使用。
将相同单词的出现加在一起 tokenTable = tokenTable.groupby('Word').sum().reset_index();
问题在于它让我的记忆达到我的计算机冻结并在10分钟内关闭的程度,这不是很令人愉快,但更重要的是它没有做到总结。
经过一些调试和网上研究后,我发现sum()函数导致了问题,GitHub上有一个与此相关的错误:https://github.com/pandas-dev/pandas/issues/16788
我尝试了那里的建议,但我有最新版本的瓶颈,并且还尝试了页面上的代码片段,即:
y = tokenTable.values.sum(axis=0) # requires < 4 GB of memory
y = pd.Series(y, index=tokenTable.columns)
但这并没有帮助我避免内存泄漏,而且我基本上没有想到可能导致内存泄漏的想法。
你能帮我提供一个替代代码或一些配置更新,以便我能够进行求和,最好不要使用超过4GB的内存吗?
数据框的大小:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 26208 entries, 0 to 0
Data columns (total 5 columns):
Bottom 26208 non-null object
Middle 26208 non-null object
Picture 26208 non-null object
Top 26208 non-null object
Word 26208 non-null object
dtypes: object(5)
memory usage: 1.2+ MB
相关模块的版本
numpy 1.13.1,pandas 0.20.3,scipy 0.19.1,瓶颈1.2.1,spyder 3.1.4有关计算的更多信息,示例数据
在上面的例子中,每个单词都有一个Bottom-Middle-Top列,但是一个单词可以多次出现。基本上,我想为所有单词添加Bottom-Middle-Top和picture列,因此我在B-M-T中有一个单词计数,在图片列中有一个图片文件名列表。这就是我的groupby(&#39; Word&#39;)。sum()为我做了较小的数据。
Bottom Middle Picture Top \
0 0 0 0 3dad916f29adacccb660ca46ac93cadf_best.jpg... 1
0 0 0 0 3dad916f29adacccb660ca46ac93cadf_best.jpg... 1
0 0 0 0 3dad916f29adacccb660ca46ac93cadf_best.jpg... 1
0 0 1 0 b0cad74387ae31688fe3584746068871_best.jpg... 0
0 0 1 0 b0cad74387ae31688fe3584746068871_best.jpg... 0
Word
0 100%
0 cotton~Collar
0 Hood
0 Pleated
0 Crepe