我正在使用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)
答案 0 :(得分:0)
但是你仍然在total
中累积数据,而series
被垃圾收集。也许优化算法?它看起来你只想加入相同格式的文件,如果这样就不需要使用pandas了。