Pandas Group по освобождению памяти

проблема

Я заметил, что память выделяется при переборе пандГруппа по объект не освобождается после итерации. я используюresource.getrusage(resource.RUSAGE_SELF).ru_maxrss (второй ответ в этом посте для деталей) для измерения общего объема активной памяти, используемой процессом Python.

import resource
import gc

import pandas as pd
import numpy as np

i = np.random.choice(list(range(100)), 4000)
cols = list(range(int(2e4)))

df = pd.DataFrame(1, index=i, columns=cols)

gb = df.groupby(level=0)
# gb = list(gb)
for i in range(3):
    print(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1e6)
    for idx, x in enumerate(gb):
        if idx == 0:
            print(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1e6)
    # del idx, x
    # gc.collect()

печатает следующую общую активную память (в ГБ)

0.671732
1.297424
1.297952
1.923288
1.923288
2.548624
Решения

раскомментировавdel idx, x а такжеgc.collect() устраняет проблему Я, однако, долженdel все переменные, которые ссылаются на DataFrames, возвращаются путем итерации по группам (что может быть проблемой в зависимости от кода во внутреннем цикле for). Новые печатные использования памяти становятся:

0.671768
1.297412
1.297992
1.297992
1.297992
1.297992

Или я могу раскомментироватьgb = list(gb), Полученное использование памяти примерно такое же, как в предыдущем решении:

1.32874
1.32874
1.32874
1.32874
1.32874
1.32874
ВопросыПочему память для DataFrames, полученная в результате итерации по группе, не освобождается после завершения итерации?Есть ли лучшее решение, чем два выше? Если нет, какое из этих двух решений "лучше"?

Ответы на вопрос(2)

Ваш ответ на вопрос