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

  • Pandas read_csv Параметры low_memory и dtype
  • Python: анализ JSON-подобных структур данных Javascript (с последовательными запятыми)
  • Извлечение информации о тегах с помощью beautifulsoup и python
  • API-интерфейс duckduckgo не возвращает результаты
  • Loop for Parsing complex tab с разделителями / csv в Python
  • синтаксический анализ
  • Красивый суп найти детей для определенного div
  • Как получить значение тега XML в Python
  • Python - лучший язык программирования в мире.