我通过这段代码发现了 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])
100% 的计算机内存在几秒钟内达到,卡住一切。我使用 Debian 2.30、Intel i5、8 GB 内存。
我认为这与以下问题有关:
memory leak in creating a buffer with pandas?
Memory leak using pandas dataframe
有人知道我该如何处理这种泄漏?我真的必须使用 .loc 方法来检索每次迭代的特定参数。
最佳答案
您可以每隔一段时间尝试一次gc.collect()
。
更好的做法是:par = par.T
,然后通过 par[fac]
选择。这样您就不会每次都获取一个横截面,根据定义,它会在您保留对它的引用时创建一个副本(并且很容易只保留分配内存)。
更好的方法是重构此计算以避免此类选择并将其矢量化。
关于python - DataFrame .loc 泄漏内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22657383/