Вы не можете поместить этот большой DataFrame в память. Есть несколько способов обойти это:
Сначала вы можете разобрать его старым способом, используя библиотеку csv
, читая файл построчно и записывая его в словарь. Панды используют оптимизированные структуры для хранения кадров данных в памяти, которые намного тяжелее вашего основного словаря.
Другим способом было бы использовать параметр nrows (или chunksize) в read_csv, чтобы только читать части файла, а затем делать свои вещи на фреймах данных одну за другой и сохранять их в отдельных файлах pkl.
Если вам нужна только статистическая информация о данных, вы можете просто получить их, а затем отбросить кадры данных. Вы также можете просто извлечь полезные данные, чтобы получить меньшие кадры данных, а затем объединить их в один кадр данных, который может поддерживать ваша память.
Если вам абсолютно необходим полный массив данных и большая часть данных является числовой, вы можете оптимизировать память с помощью этой функции:
def reduce_mem(df):
df = df.apply(pd.to_numeric, errors='ignore', downcast='float')
df = df.apply(pd.to_numeric, errors='ignore', downcast='integer')
df = df.apply(pd.to_numeric, errors='ignore', downcast='unsigned')
Вам по-прежнему приходится считывать блок данных по блокам (используя chunksize или nrows), но затем вы можете попытаться объединить фрагменты, если сокращения памяти достаточно.
Также вот полезная функция: df.memory_usage(deep=True)
печатает размер DataFrame