【发布时间】:2014-02-09 18:22:25
【问题描述】:
我正在使用一个 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)
【问题讨论】:
-
它们可能是使用挤压的错误;尝试不使用它(并且只是获取系列的子集);如果不同,请在 github 上提交错误报告
-
@Jeff,没有挤压不会出现同样的问题
标签: python garbage-collection pandas out-of-memory