Как удалить несколько фреймов данных 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
Ответы
Ответ 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()
Но частые вызовы сбора мусора не рекомендуется, поскольку это дорогостоящая операция и может повлиять на производительность.
Ссылка