Pandas get_dummies (one-hot encoding)
pd.get_dummies превращает категориальный столбец в набор бинарных
«индикаторов»: для каждой категории создаётся отдельный столбец 0/1. Это
стандартный приём для подготовки данных к моделям машинного обучения, которые
не работают со строковыми признаками напрямую.
Когда использовать
Подготовка фичей перед обучением модели.
Кодирование статусов «ok/fail/idle».
Раскрытие столбца «модель устройства» в отдельные бинарные признаки.
Пример 1. Базовое использование
import pandas as pd
s = pd.Series(["A", "B", "A", "C"])
print(pd.get_dummies(s))
Output:
A B C
0 True False False
1 False True False
2 True False False
3 False False True
Пример 2. На DataFrame
import pandas as pd
df = pd.DataFrame({
"device": ["bot1", "bot2", "bot1"],
"status": ["ok", "fail", "ok"],
"v": [10, 20, 30],
})
print(pd.get_dummies(df, columns=["device", "status"]))
Output:
v device_bot1 device_bot2 status_fail status_ok
0 10 True False False True
1 20 False True True False
2 30 True False False True
Пример 3. drop_first
В линейных моделях избегают коллинеарности — удаляют один столбец:
import pandas as pd
s = pd.Series(["A", "B", "C"])
print(pd.get_dummies(s, drop_first=True))
Output:
B C
0 False False
1 True False
2 False True
Пример 4. Целочисленный вывод
import pandas as pd
s = pd.Series(["A", "B"])
print(pd.get_dummies(s, dtype=int))
Output:
A B
0 1 0
1 0 1
Пример 5. Префикс
import pandas as pd
s = pd.Series(["red", "green"])
print(pd.get_dummies(s, prefix="color"))
Output:
color_green color_red
0 False True
1 True False
Пример 6. dummy_na
import pandas as pd
import numpy as np
s = pd.Series(["A", "B", np.nan])
print(pd.get_dummies(s, dummy_na=True))
Output:
A B NaN
0 True False False
1 False True False
2 False False True
Пример 7. Обратное преобразование
import pandas as pd
df = pd.DataFrame({"A": [1, 0, 0], "B": [0, 1, 0], "C": [0, 0, 1]})
print(df.idxmax(axis=1))
Output:
0 A
1 B
2 C
dtype: object
Подводные камни
Большое число уникальных значений → «взрыв» столбцов. Сначала ограничьте категории.
Категории, отсутствующие в тренировке, не появятся в тесте — фиксируйте словарь категорий заранее.
True/Falseнельзя напрямую усреднять без приведения вint.
См. также
Примечание
Лицензия и источники
Техническое описание адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Перевод на русский, примеры и пояснения — © AlashEd Wiki.