DataFrame .loc 导致内存泄漏

4 投票
1 回答
1442 浏览
提问于 2025-04-17 23:57

我发现了在使用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内存。

我觉得这个问题和以下几个问题有关:

在使用Pandas创建缓冲区时的内存泄漏?

使用Pandas DataFrame时的内存泄漏

有人知道我该如何处理这个内存泄漏吗?我真的需要使用.loc方法来在每次迭代中获取特定的参数。

1 个回答

2

你可以试着每隔一段时间用 gc.collect() 来清理一下内存。

更好的方法是这样做:par = par.T,然后通过 par[fac] 来选择数据。这样你就不需要每次都进行交叉选择,因为这样会创建一个副本(这会占用内存),而且你还在保持对它的引用。

更进一步的话,可以考虑重新设计这个计算,避免这种选择方式,并使用向量化的方法。

撰写回答