2014-03-26 34 views
2

我已经确定另一存储与熊猫泄漏:计算机存储器的数据帧的.loc通过这段代码泄漏内存

import pandas as pd 
    store = pd.HDFStore(hdf[0]) 
    par = store[hdf[1]][:, hdf[2]] 
    store.close() 

    for pixel in pix_fac.itervalues(): 
    fac = pixel[4][::2] 
    meas = array(par.loc[fac]) 

100%是达到在若干秒,冻结一切。我使用的是Debian 2.30,Intel i5,8 GB RAM。

我相信这与下列问题有关:

memory leak in creating a buffer with pandas?

Memory leak using pandas dataframe

有人知道如何可以我处理这个泄漏?我真的必须使用.loc方法来检索每次迭代的特定参数。

回答

1

你可以每隔一段时间尝试一下gc.collect()

更好,请执行:par = par.T,并通过par[fac]选择。这样你就不会每次都得到一个横截面,根据定义,当你保持对它的引用时,它会创建一个副本(并且容易分配内存)。

更好的做法是重构此计算以避免此类选择并将其向量化。

+0

实际上,我发现如果将浮点值输入到.loc中,但索引是整数(反之亦然),则熊猫不返回错误,但会建立内存。奇怪的行为。 –

+0

您不应该将float值用作索引器,它现在可以工作,但将来会被弃用。真的很难看到你正在做的没有显示更多的代码/结构。 – Jeff

+0

是的,我明白了。使用Float作为索引是一个错误。我将所有内容都转换为整数我偶然看到了这个错误,这就是为什么我没有在问题中强调它的原因。 –