重新分配到Python pandas系列:垃圾收集

时间:2014-02-09 18:22:25

标签: python garbage-collection pandas out-of-memory

我正在使用for循环,将大约1gb的tsv文件加载到pandas系列中。它们总是分配给同一个变量,然后我使用Series.add()将它们添加到包含系列中数字总数的系列中。

更新:为了澄清,所有的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 个答案:

答案 0 :(得分:0)

但是你仍然在total中累积数据,而series被垃圾收集。也许优化算法?它看起来你只想加入相同格式的文件,如果这样就不需要使用pandas了。