Pandas read_csv на файле объемом 6.5 ГБ потребляет более 170 ГБ ОЗУ

Я хотел поднять это, просто потому, что это сумасшествие странно. Может, у Уэса есть какая-то идея. Файл довольно регулярный: 1100 строк x ~ 3M столбцов, данные разделяются по тегам, состоящие исключительно из целых чисел 0, 1 и 2. Очевидно, этого не ожидается.

Если я предварительно заполняю DataFrame, как показано ниже, он потребляет ~ 26 ГБ оперативной памяти.

h = open("ms.txt") header = h.readline().split("\t") h.close() rows=1100 df = pd.DataFrame(columns=header, index=range(rows), dtype=int) 

Системная информация:

Любые идеи приветствуются.

One Solution collect form web for “Pandas read_csv на файле объемом 6.5 ГБ потребляет более 170 ГБ ОЗУ”

Проблема вашего примера.

Попытка вашего кода в небольшом масштабе, я замечаю, даже если вы установили dtype=int , на самом деле вы заканчиваете dtype=object в полученном вами фреймворке.

 header = ['a','b','c'] rows = 11 df = pd.DataFrame(columns=header, index=range(rows), dtype=int) df.dtypes a object b object c object dtype: object 

Это связано с тем, что, несмотря на то, что вы pd.read_csv функции pd.read_csv инструкцию, что столбцы dtype=int , она не может переопределить типы dtypes, которые в конечном итоге определяются данными в столбце.

Это связано с тем, что панды плотно связаны с numpy и numpy dtypes.

Проблема в том, что в созданном фреймворке данных нет данных, поэтому numpy по умолчанию использует данные np.NaN , которые не вписываются в целое число.

Это означает, что numpy запутался и по умолчанию возвращается к объекту dtype.

Проблема объекта dtype.

Наличие набора dtype для object означает большие накладные расходы на потребление памяти и время распределения по сравнению с тем, если бы вы установили dtype как integer или float.

Обходной путь для вашего примера.

 df = pd.DataFrame(columns=header, index=range(rows), dtype=float) 

Это работает отлично, поскольку np.NaN может жить в поплавке. Это производит

 a float64 b float64 c float64 dtype: object 

И нужно меньше памяти.

Подробнее о том, как относиться к dtypes

См. Этот связанный пост для получения подробной информации о dtype: Pandas read_csv low_memory и dtype options

  • Анализ и перемещение элементов из файла Markdown
  • Почему ElementTree повышает ParseError?
  • Как анализировать дату / время RFC 2822 в дату и время Python?
  • Импортирование внешнего BLLIP-модуля в стиле дерева в стиле дерева, используя NLTK
  • Как разобрать HTML-файл с таблицей с помощью Python
  • Попытка разобрать текстовые файлы в python для анализа данных
  • Преобразование строки в кортеж
  • Ищете рекомендации о том, как конвертировать PDF в структурированный формат
  • Поиск в HTML-странице с использованием шаблонов Regex с помощью python
  • Анализ аргументов в Python (требуется по выбору)
  • Python PLY ноль или больше вхождений элемента синтаксического анализа
  •  
    Interesting Posts for Van-Lav

    построение трехмерных векторов с использованием matplot lib

    Как определить метакласс для класса, который простирается от декларативной базы sqlalchemy

    Сверточная сеть Tensorflow

    искать элемент в списке и заменять его несколькими пунктами

    SymPy: Как вернуть выражение в терминах других выражений (выражений)?

    django serialize queryset.values ​​() в json

    ValueError: длина строк должна совпадать, если сравнивать даты в Pandas

    urllib2 имеет проблемы с обработкой символа двоеточия в URL-адресе

    Без стеков в PyPy и PyPy + greenlet – отличия

    Поиск 2-мерного набора / списка в Python

    Почему S3 (использование с boto и django-storage) дает подписанный url даже для общедоступных файлов?

    Итерирование массива в Python с использованием функции brentq

    Запустите сервер разработки App Engine с модулями в PyCharm

    Многопроцессорство запускает слишком много экземпляров Python VM

    Доступ к экземпляру класса из другого модуля (Python)

    Python - лучший язык программирования в мире.