2014-03-26 57 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作爲索引是一個錯誤。我將所有內容都轉換爲整數我偶然看到了這個錯誤,這就是爲什麼我沒有在問題中強調它的原因。 –