Оптимизируем размер памяти DataFrame в 3 раза 🚀
🚀 Поговорим про эффективное использование памяти в библиотеке Pandas. Опережая вопросы, скажу, что в большинстве компаний, где используется Big Data, код обычно написан на PySpark, но это уже совсем другая история 😅
Сегодня мы рассмотрим методы, позволяющие сократить расход памяти при использовании Pandas. Это помогает не только оптимизировать память, но и также ускорить работу с таблицами в Pandas.
Давайте представим, что вам необходимо загрузить огромный датасет для его исследования и построения модели машинного обучения в дальнейшем. Вы столкнулись с ошибкой Memory Error, ведь датасет был действительно внушительных размеров.
Раскидать датасет по разным файлам (и обрабатывать фрагменты) или сжать данные вы не можете. Что делать?
📌 Первое, о чем вы должны вспомнить, что при загрузке данных в pandas DataFrame значения не всегда получают наиболее подходящие типы данных. Например, вместо int8 назначается тип int64 из-за чего объем используемой памяти существенно возрастает.
🔨 int64 – это целые числа в диапазоне от -9223372036854775808 по 9223372036854775807, (числа размером 8 байт). И если у вас таблица размером миллион объектов, то каждый столбец типа int64 будет занимать 8 миллионов байт!!
✅ Если наши значения в столбце имеют небольшой диапазон, например min=-10000, а max=20000, то лучше использовать тип int16. Целые числа в диапазоне от -32768 по 32767 (2 байта).
И если вы переведете подобные столбцы из int64 в int16, то заметите значительное сокращение потребления памяти.
✅ Думаю, мы достаточно поговорили про числовые типы данных. Давайте подумаем, как можно сократить память в столбцах типа object. Категории в этих столбцах конечны (диапазон возможных значений фиксирован), более того, в столбцах много повторений, поэтому можно (и нужно) привести тип object к типу category. И вы снова можете заметить сокращение памяти!
Чтобы посмотреть, как это все сработало на большой таблице в миллион строк, читайте полную статью с примерами кода 😎
https://vk.com/@pymagic-optimiziruem-razmer-pamyati-dataframe-v-3-raza
Post #395
3.65K