У меня есть панды dataframe с тоннами категоричных колонн, которые я планирую использовать в дерево решений с scikit учиться. Мне нужно преобразовать их в числовые значения (не один горячий вектор). Я могу сделать это с LabelEncoder из scikit учиться. Проблема в том, что их слишком много, и я не хочу конвертировать их вручную.
Что бы быть простой способ автоматизировать этот процесс.
scikit-learn
pandas
categorical-data
labels
user1700890
источник
источник
Ответы:
Если ваши категориальные столбцы в настоящее время являются символами / объектами, вы можете использовать что-то вроде этого, чтобы сделать каждый:
Если вам нужно вернуться к категориям, я бы создал словарь для сохранения кодировки; что-то типа:
Использование mcve Жюльена выведет:
источник
object
столбцов очень полезен.Во-первых, давайте создадим mcve для игры:
Теперь мы можем использовать pd.get_dummies для кодирования первых трех столбцов.
Обратите внимание, что я использую
drop_first
параметр, потому чтоN-1
пустышки достаточно для полного описанияN
возможностей (например: еслиa_Var2
иa_Var3
0, то этоa_Var1
). Кроме того , я специально указав столбцы , но я не должен , как это будет столбцы с DTYPE либоobject
илиcategorical
(подробнее ниже).В вашем конкретном приложении вы должны будете предоставить список столбцов, которые являются Категориальными, или вы должны будете определить, какие столбцы являются Категориальными.
В лучшем случае в вашем фрейме данных эти столбцы уже есть,
dtype=category
и вы можете перейтиcolumns=df.columns[df.dtypes == 'category']
к нимget_dummies
.В противном случае я предлагаю установить
dtype
все остальные столбцы соответствующим образом (подсказка: pd.to_numeric, pd.to_datetime и т. Д.), И у вас останутся столбцы, имеющиеobject
тип d, и они должны быть вашими категориальными столбцами.По умолчанию столбцы параметров pd.get_dummies:
источник
Чтобы преобразовать типы нескольких столбцов одновременно, я бы использовал что-то вроде этого:
Тогда я бы присоединился к ним
original df
.источник
df2[df2.columns] = df2[df2.columns].astype('category')
делает то же самое, нетapply
, нетlambda
.