2014-02-09 7 views
1

Я использую цикл for, который загружает файлы TSV объемом около 1 гб в серии pandas. Они всегда назначаются одной и той же переменной, а затем я использую Series.add(), чтобы добавить их в серию, содержащую общее число номеров в серии.Переназначение на Pandon pandas series: сборка мусора

Обновление: Чтобы уточнить, все ЦС имеют более или менее одинаковый индекс, поэтому длина общей серии не изменит только значения, которые будут добавлены.

Я бы ожидал, что память «старой» серии будет периодически освобождаться, чтобы использование памяти оставалось в пределах границ. Тем не менее, использование памяти увеличивается до тех пор, пока не будет исчерпана память на 62 ГБ машины.

Есть ли у кого-нибудь идеи, как решить проблему? Я попытался удалить переменную явно в цикле, и я попытался вызвать 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

Возможно, что это ошибка при использовании сжатия; попробуйте без него (и просто подмножество для получения серии); если это другой файл PLS, сообщение об ошибке на github – Jeff

+0

@Jeff, проблема не возникает без сжатия – feilchenfeldt

ответ

0

Но вы по-прежнему накапливать данные в total, в то время как series сборщиком мусора. Может быть, оптимизировать алгоритм? Мне кажется, вы просто хотите присоединиться к файлам того же формата, если для этого не нужно использовать pandas.

+0

Привет. Нет, я на самом деле не собираю данные. Я не присоединяюсь к файлам, но вычисляю сумму объектов серии. общая всегда остается серией более или менее одинаковой длины, только значения растут, но не чрезмерно. – feilchenfeldt

+1

Какую версию панд вы используете? Я проверил ваш скрипт в своей системе и не имел проблем с потреблением памяти (python2 + pandas 0.13.0). Также вы проверили, сколько прогонов для цикла? Может быть, недостаточно памяти для загрузки даже 1 серии, так как у нее могут быть некоторые накладные расходы для хранения данных. – rsk

+0

Спасибо за предложения rsk. Я использую pandas 0.12.0. Я имею 62Gb имеющийся и каждый архив 1GB. Цикл for, по крайней мере, выполняет несколько прогонов. Я пробовал только с 5 файлами, и он работает, но с 160 файлами (как мне нужно) он сбой. – feilchenfeldt

Смежные вопросы