Выбор ответа Senior Производительность и память обновлено

category теряется при concat

Вопрос

Две таблицы с колонкой city типа category склеили pd.concat. Память выросла в разы. Почему?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Категории в таблицах разные, и колонка стала обычной строковой. Если категории не совпадают, concat не может сохранить тип и превращает колонку в строки, а с ними уходит и экономия памяти.

Варианты ответа

  1. concat всегда копирует данные дважды: для значений и для индекса
  2. category нельзя склеивать, и pandas молча раздувает колонку
  3. Категории в таблицах разные, и колонка стала обычной строковойправильный ответ
  4. Индекс стал MultiIndex, и для каждой строки хранится пара ключей

Разбор

Если категории не совпадают, concat не может сохранить тип и превращает колонку в строки, а с ними уходит и экономия памяти. Решение: привести обе колонки к общему набору категорий (union_categoricals или set_categories) до склейки. Склеивать category можно, а лишнего двойного копирования и MultiIndex тут нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.