codes, uniques = pd.factorize(df['channel'])
print(codes)
print(list(uniques))
Результат:
[0 1 0 2] ['organic', 'paid', 'email']
codes, uniques = pd.factorize(df['channel'], sort=True)
print(codes)
print(list(uniques))
Результат:
[1 2 1 0] ['email', 'organic', 'paid']
codes, uniques = pd.factorize(pd.Series(['organic', None, 'paid']))
codes
Результат:
array([ 0, -1, 1])Порешать Python-задачи в тренажёре →
Быстрое label-кодирование категорий для tree-моделей, компактного хранения и группировок по целым ключам. Спрашивают отличие от get_dummies (one-hot) и pd.Categorical, а также как обрабатывается NaN (-1).
factorize кодирует категории в ОДНУ целочисленную колонку (label encoding): organic→0, paid→1. get_dummies разворачивает значения в несколько бинарных колонок (one-hot). factorize компактнее и подходит для tree-моделей, а one-hot — для линейных, где порядок кодов не должен нести смысл.
NaN/None по умолчанию кодируется отдельным сентинелом -1 и не включается в uniques (параметр use_na_sentinel=True). Если нужно, чтобы NaN стал обычной категорией со своим кодом, выставьте use_na_sentinel=False.
По умолчанию factorize нумерует категории в порядке их первого появления в данных, а не по сортировке. Передайте sort=True, чтобы uniques были отсортированы, а коды соответствовали этому порядку.
Pandas: основы · Pandas groupby
groupby · merge · pivot_table · apply · value_counts · drop_duplicates
Открыть Python-тренажёр (556 задач) →