pandas get_dummies(): one-hot кодирование категорий

pd.get_dummies превращает категориальную колонку в набор индикаторных (0/1) столбцов — классический one-hot encoding. Нужен, чтобы скормить категории линейным моделям и метрикам, которые не понимают текст. Параметр drop_first убирает лишний столбец против мультиколлинеарности. Нюанс версий: с pandas 2.0 по умолчанию возвращается булев тип (True/False), раньше был uint8.

Синтаксис

pd.get_dummies(data, columns=None, prefix=None, drop_first=False, dummy_na=False, dtype=bool)

Примеры использования

Пример 1: One-hot по колонке channel

import pandas as pd
df = pd.DataFrame({'user_id': [1,2,3],
                   'channel': ['seo','ads','seo']})
pd.get_dummies(df, columns=['channel'])

Результат:

   user_id  channel_ads  channel_seo
0        1        False         True
1        2         True        False
2        3        False         True

Пример 2: drop_first против мультиколлинеарности

pd.get_dummies(df['channel'], drop_first=True)

Результат:

     seo
0   True
1  False
2   True

Пример 3: Числовой тип 0/1 через dtype=int

pd.get_dummies(df['channel'], dtype=int)

Результат:

   ads  seo
0    0    1
1    1    0
2    0    1
Порешать Python-задачи в тренажёре →

Типичная ошибка

По умолчанию NaN не кодируется — строка получает нули во всех индикаторах; чтобы выделить пропуск отдельным столбцом, нужен dummy_na=True. В pandas 2.0 dtype результата — bool, а не 0/1, что ломает старый код, ожидающий числа; фиксируется через dtype=int.

Где спрашивают на собеседовании

Спрашивают в блоке про подготовку признаков к ML; идёт в паре с обсуждением мультиколлинеарности (drop_first) и OneHotEncoder из sklearn.

FAQ: частые вопросы про get_dummies

Зачем нужен drop_first=True?

Он убирает первую категорию, чтобы избежать мультиколлинеарности (dummy trap) в линейных моделях: k категорий кодируются k-1 столбцами без потери информации. Для деревьев и градиентного бустинга это не обязательно и обычно оставляют все столбцы.

Какой тип у колонок в pandas 2.0?

С pandas 2.0 get_dummies по умолчанию возвращает булев тип (True/False), тогда как раньше был uint8. Если нужны числовые 0/1 — укажите dtype=int. Это частая причина расхождений при обновлении версии pandas.

Как обратно раскодировать one-hot?

Используйте pd.from_dummies(df) (доступна с pandas 1.5+) — она собирает индикаторные столбцы обратно в одну категориальную колонку. Как альтернатива — idxmax(axis=1) по нужным столбцам, если категории взаимоисключающие.

Задачи в тренажёре по теме

Вопросы с собеседований по теме

Смежные темы Python

Pandas: основы · NumPy векторизация

Другие функции pandas

groupby · merge · pivot_table · apply · value_counts · drop_duplicates

Открыть Python-тренажёр (556 задач) →