Выбор ответа Senior Производительность и память обновлено
category теряется при concat
Вопрос
Две таблицы с колонкой city типа category склеили pd.concat. Память выросла в разы. Почему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Категории в таблицах разные, и колонка стала обычной строковой. Если категории не совпадают, concat не может сохранить тип и превращает колонку в строки, а с ними уходит и экономия памяти.
Варианты ответа
concatвсегда копирует данные дважды: для значений и для индексаcategoryнельзя склеивать, и pandas молча раздувает колонку- Категории в таблицах разные, и колонка стала обычной строковойправильный ответ
- Индекс стал MultiIndex, и для каждой строки хранится пара ключей
Разбор
Если категории не совпадают, concat не может сохранить тип и превращает колонку в строки, а с ними уходит и экономия памяти. Решение: привести обе колонки к общему набору категорий (union_categoricals или set_categories) до склейки. Склеивать category можно, а лишнего двойного копирования и MultiIndex тут нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Производительность и память»
- Чем заменить apply(axis=1)
- Когда помогает тип category
- Цепочное присваивание в pandas 3.0
- Обнулить тестовые заказы через loc
- Скидка по категории через map
- Категории сумм через np.select
- Copy-on-Write: изменение колонки
- Copy-on-Write и SettingWithCopyWarning