Подтвердить что ты не робот

Как удалить несколько фреймов данных pandas (python) из памяти для сохранения ОЗУ?

У меня много данных, созданных как часть предварительной обработки. Поскольку у меня ограниченный 6 ГБ оперативной памяти, я хочу удалить все ненужные фреймы данных из ОЗУ, чтобы избежать нехватки памяти при запуске GRIDSEARCHCV в scikit-learn.

1) Есть ли функция для отображения только всех загружаемых в память данных?

Я попробовал dir(), но он дает много другого объекта, кроме данных.

2) Я создал список фреймов данных для удаления

del_df=[Gender_dummies,
 capsule_trans,
 col,
 concat_df_list,
 coup_CAPSULE_dummies]

& побежал

for i in del_df:
    del (i)

Но не удаляет данные. Но удаление отдельных кадров данных индивидуально как показано ниже, удаляет данные из памяти.

del Gender_dummies
del col
4b9b3361

Ответ 1

Оператор

del не удаляет экземпляр, он просто удаляет имя.

Когда вы выполняете del i, вы удаляете только имя i, но экземпляр все еще привязан к другому имени, поэтому он не будет собираться с мусором.

Если вы хотите освободить память, ваши данные должны быть Garbage-Collected, т.е. удалить все ссылки на них.

Если вы создали динамические диаграммы даты для списка, то удаление этого списка приведет к сбору коллекции мусора.

>>> lst = [pd.DataFrame(), pd.DataFrame(), pd.DataFrame()]
>>> del lst     # memory is released

Если вы создали некоторые переменные, вам придется удалить их все.

>>> a, b, c = pd.DataFrame(), pd.DataFrame(), pd.DataFrame()
>>> lst = [a, b, c]
>>> del a, b, c # dfs still in list
>>> del lst     # memory release now

Ответ 2

В python автоматическая сборка мусора освобождает переменную (pandas DataFrame - это еще один объект с точки зрения python). Существуют различные стратегии сбора мусора, которые можно настроить (требуется значительное обучение).

Вы можете вручную запустить сборку мусора с помощью

import gc
gc.collect()

Но частые вызовы сбора мусора не рекомендуется, поскольку это дорогостоящая операция и может повлиять на производительность.

Ссылка