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
pd.get_dummies(df['channel'], drop_first=True)
Результат:
seo 0 True 1 False 2 True
pd.get_dummies(df['channel'], dtype=int)
Результат:
ads seo 0 0 1 1 1 0 2 0 1Порешать Python-задачи в тренажёре →
Спрашивают в блоке про подготовку признаков к ML; идёт в паре с обсуждением мультиколлинеарности (drop_first) и OneHotEncoder из sklearn.
Он убирает первую категорию, чтобы избежать мультиколлинеарности (dummy trap) в линейных моделях: k категорий кодируются k-1 столбцами без потери информации. Для деревьев и градиентного бустинга это не обязательно и обычно оставляют все столбцы.
С pandas 2.0 get_dummies по умолчанию возвращает булев тип (True/False), тогда как раньше был uint8. Если нужны числовые 0/1 — укажите dtype=int. Это частая причина расхождений при обновлении версии pandas.
Используйте pd.from_dummies(df) (доступна с pandas 1.5+) — она собирает индикаторные столбцы обратно в одну категориальную колонку. Как альтернатива — idxmax(axis=1) по нужным столбцам, если категории взаимоисключающие.
Pandas: основы · NumPy векторизация
groupby · merge · pivot_table · apply · value_counts · drop_duplicates
Открыть Python-тренажёр (556 задач) →