удалить датафрейм Python Pandas в конце итерации цикла - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь применить ту же самую обработку к группе данных панд.

Поскольку эти кадры данных большие, у меня недостаточно памяти для их одновременной загрузки. Итак, у меня есть список с соответствующими местоположениями, и я хочу загрузить и проанализировать их один за другим.

Однако с каждой итерацией все больше и больше памяти используется. Я думаю, что кадры данных не удаляются в конце итерации. Я не знаю, как это исправить.

Вот мой код:

folder = 'my/folder'
colors = ['b', 'r']

for i, f in enumerate(glob.glob(folder+'*.txt')):
    print(f)
    df = pd.read_table(f, index_col=False, header=None, delimiter="\t", names=['chr', 'x', 'y'])
    plt.figure(figsize=(32, 8))
    for j, chrm in enumerate(df.chr.unique()):
        plt.plot(df.loc[df.chr == chrm].x, df.loc[df.chr == chrm].y, label=chrm, color=colors[j])
    plt.ylim(0, 200)
    plt.legend()

Я должен добавить, что я работаю в Spyder.

Пока я пробовал:

  • для добавления del df и df=None в конце цикла
  • , чтобы превратить цикл for в функцию и вызвать для него функцию map
  • для использования функции gc.collect() из пакета gc в конце цикла

Кто-нибудь знает, как удалить мой df в конце итерации или альтернативное решение?

Большое спасибо.

1 Ответ

0 голосов
/ 17 сентября 2018

оператор del просто удалит имя. Вам придется вручную собирать мусор, чтобы удалить фреймы данных из памяти. Попробуйте это:

импорт gc GC.Collect ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...