for 루프를 사용하여 각각 약 1GB의 tsv 파일을 팬더 시리즈에로드합니다. 그들은 항상 같은 변수에 할당 된 다음 Series.add()를 사용하여 시리즈의 총 숫자가 포함 된 시리즈에 추가합니다.Python pandas 시리즈에 재 할당 : 가비지 콜렉션
업데이트 : 모든 tsv는 더 많거나 적은 동일한 색인을 가지고 있으므로 전체 시리즈의 길이는 실제로 합산 된 값만 변경하지 않습니다.
"오래된"시리즈가 가끔 해제되어 메모리 사용량이 제한 범위 내에 머물러 있기를 기대합니다. 그러나 메모리 사용량은 컴퓨터의 62GB 메모리가 모두 소모 될 때까지 증가합니다.
누구든지 아이디어를 어떻게 해결할 수 있습니까? 루프 내에서 명시 적으로 변수를 삭제하려고 시도하고 루프에서 gc.collect()를 호출하려고했습니다. 둘 다 도움이되지 못했습니다. 파이썬 2.73을 사용하고 있습니다.
더 상세 다음 TSV에
처음 두 열 인덱스 (염색체 위치)와 제 3 컬럼 된 파일은 정수이다.
코드는 다음과 같습니다
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)
squeeze를 사용하는 것이 버그 일 수 있습니다. 그것을하지 않고 (그리고 시리즈를 얻을 하위 집합); 그것이 다른 경우 pls는 github에 버그 보고서를 제출합니다 – Jeff
@Jeff, 같은 문제가 발생하지 않습니다. – feilchenfeldt