如何避免Pandas中DataFrame.sum()导致的内存泄漏?

时间:2017-07-27 12:14:39

标签: python python-3.x pandas numpy memory-leaks

我正在使用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  

0 个答案:

没有答案