DataFrame .loc 导致内存泄漏
我发现了在使用Pandas时又一个内存泄漏的问题,下面这段代码就是罪魁祸首:
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])
在几秒钟内,电脑的内存就被用光了,导致一切都卡住了。我用的是Debian 2.30,Intel i5,8GB内存。
我觉得这个问题和以下几个问题有关:
有人知道我该如何处理这个内存泄漏吗?我真的需要使用.loc方法来在每次迭代中获取特定的参数。
1 个回答
2
你可以试着每隔一段时间用 gc.collect()
来清理一下内存。
更好的方法是这样做:par = par.T
,然后通过 par[fac]
来选择数据。这样你就不需要每次都进行交叉选择,因为这样会创建一个副本(这会占用内存),而且你还在保持对它的引用。
更进一步的话,可以考虑重新设计这个计算,避免这种选择方式,并使用向量化的方法。