Максимальный размер фрейма pandas

Я пытаюсь прочитать несколько большой набор данных, используя функции panda read_csv или read_stata, но я продолжаю работать в Memory Error s. Каков максимальный размер кадра данных? Я понимаю, что данные должны быть в порядке, пока данные вписываются в память, что не должно быть проблемой для меня. Что еще может вызвать ошибку памяти?

В контексте я пытаюсь прочитать в Обзор потребительских финансов 2007, как в формате ASCII (используя read_csv), так и в формате Stata (используя read_stata). Файл составляет около 200 МБ, как dta и около 1,2 ГБ, как ASCII, и его открытие в Stata говорит мне, что имеется 5,800 переменных/столбцов для 22 000 наблюдений/строк.

Ответ 1

Я собираюсь опубликовать этот ответ, как обсуждалось в комментариях. Я видел, как он встречался много раз без принятого ответа.

Ошибка памяти интуитивно понятна - из памяти. Но иногда решение или отладка этой ошибки расстраивает, поскольку у вас достаточно памяти, но ошибка остается.

1) Проверьте ошибки кода

Это может быть "глупый шаг", но почему он первый. Убедитесь, что нет бесконечных циклов или вещей, которые будут заведомо занять много времени (например, используя что-то, модуль os, который будет искать весь ваш компьютер и помещать вывод в файл excel)

2) Сделайте код более эффективным

Идет по строкам шага 1. Но если что-то простое занимает много времени, обычно есть модуль или лучший способ сделать что-то более быстрое и эффективное использование памяти. Это красота Python и/или языков с открытым исходным кодом!

3) Проверьте общую память объекта

Первый шаг - проверить память объекта. В Stack есть тонны потоков, поэтому вы можете их искать. Популярные ответы здесь и здесь

чтобы найти размер объекта в укусах, вы всегда можете использовать sys.getsizeof():

import sys
print(sys.getsizeof(OBEJCT_NAME_HERE))

Теперь может произойти ошибка до того, как что-либо будет создано, но если вы прочитаете куски csv, вы увидите, сколько памяти используется на кусок.

4) Проверьте память во время работы

Иногда у вас достаточно памяти, но функция, с которой вы работаете, потребляет много памяти во время выполнения. Это заставляет память выходить за пределы фактического размера конечного объекта, что приводит к ошибке кода/процесса. Проверка памяти в режиме реального времени является длительной, но может быть выполнена. Ипитон хорош в этом. Проверьте Их документ.

используйте приведенный ниже код, чтобы увидеть документацию прямо в ноутбуке Jupyter:

%mprun?
%memit?

Использование примера:

%load_ext memory_profiler
def lol(x):
    return x
%memit lol(500)
#output --- peak memory: 48.31 MiB, increment: 0.00 MiB

Если вам нужна помощь по магическим функциям Это отличный пост

5) Это может быть первым.... но проверьте простые вещи, такие как bit version

Как и в вашем случае, простое переключение версии python, с которой вы работали, решило проблему.

Обычно вышеуказанные шаги решают мои проблемы.