我使用了一個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)
它們可能是使用擠壓的一個缺陷;嘗試沒有它(只是獲得系列的子集);如果它是不同的請在github上提交bug報告 – Jeff
@Jeff,如果沒有擠壓 – feilchenfeldt