2014-02-09 14 views
1

我使用了一個for循環,它將每個大約1GB的tsv文件加載到一個熊貓系列中。它們總是分配給相同的變量,然後使用Series.add()將它們添加到包含系列中所有數字的系列中。重新分配給Python熊貓系列:垃圾回收

更新:爲了澄清,所有tsv有更多或更少的相同的索引,所以總系列的長度並不真正改變只有值得到加起來。

我期望內存「老」系列偶爾會被釋放,以便內存使用保持在界限內。但是,內存使用量會增加,直到機器的62GB內存耗盡。

有沒有人有任何想法如何解決這個問題?我嘗試在循環中顯式刪除變量,並試圖在循環中調用gc.collect()。兩者都沒有幫助。我使用Python 2.73。

更多細節:

在TSV文件前兩列是索引(染色體和位置)和第三列是整數。

代碼:

total = pd.read_csv(coverage_file1,sep='\t',index_col=[0,1],header=None,names= ['depth'],squeeze=True) 

for file in coverage_files: 
    series = pd.read_csv(file,sep='\t',index_col=[0,1],header=None,names=['depth'],squeeze=True) 
    total = total.add(series,fill_value=0).astype(int) 
    del series # I tried with and without this and the next line 
    gc.collect() 


total.to_csv(args.out,sep='\t',header=None) 
+1

它們可能是使用擠壓的一個缺陷;嘗試沒有它(只是獲得系列的子集);如果它是不同的請在github上提交bug報告 – Jeff

+0

@Jeff,如果沒有擠壓 – feilchenfeldt

回答

0

但你還是積累在total數據,而series被垃圾收集。也許優化算法?它看起來你只是想加入相同格式的文件,如果它不需要使用熊貓來做這件事。

+0

,不會發生同樣的問題。不,我沒有真正積累數據。我沒有加入文件,但計算了系列對象的總和。總數總是保持一系列或多或少相同的長度,只有值會增加,但不會過大。 – feilchenfeldt

+1

你使用什麼版本的熊貓?我在我的系統中檢查了你的腳本,並且沒有內存消耗問題(python2 + pandas 0.13.0)。你是否也檢查過循環有多少次運行?可能是沒有足夠的內存來加載甚至1個系列,因爲它可能有一些存儲數據的開銷。 – rsk

+0

感謝您的建議rsk。我正在使用熊貓0.12.0。我有62Gb可用,每個文件是1GB。 for循環至少要執行幾次運行。我嘗試只有5個文件,它的工作原理,但有160個文件(因爲我需要)它崩潰。 – feilchenfeldt