OneHotEncoder изменяет имена столбцов

#python #label #categorical-data #one-hot-encoding

#python #метка #категориальный-данные #one-hot-encoding

Вопрос:

я использую OneHotEncoder для преобразования категориального столбца в числовые данные, но алгоритм изменяет имя столбцов. как сохранить столбцы с одинаковыми именами?

(Я использую python 3)

Мой фрейм данных выглядит следующим образом :

 >>> import pandas 
>>> import numpy
>>> ar = numpy.array([['yassine', 1], ['jack',7], ['ahmed',4]])
>>> df = pandas.DataFrame(ar, columns = ['name', 'label'])
>>> df
      name label
0  yassine     1
1     jack     7
2    ahmed     4


>>> import category_encoders as ce
>>> ohe = ce.OneHotEncoder(handle_unknown='ignore', 
    use_cat_names=True)
>>> label_fournisseur = ohe.fit_transform(list(df['name']))
>>> label_fournisseur
   0_yassine  0_jack  0_ahmed
0          1       0        0
1          0       1        0
2          0       0        1
  

Мне нужно, чтобы столбцы оставались неизменными без каких-либо изменений:

      yassine    jack    ahmed
0          1       0        0
1          0       1        0
2          0       0        1
  

Спасибо

Ответ №1:

Вы можете изменять имена столбцов по своему усмотрению. Чтобы удалить «0_», вы можете сделать, например:

 label_fournisseur.columns = [ x[2:] for x in label_fournisseur.columns ]
  

Другой способ получить то, что вы хотите (без другой библиотеки):

 pandas.get_dummies(df["name"])
  

результаты в:

        ahmed  jack  yassine
0      0     0        1
1      0     1        0
2      1     0        0
  

Примечание: get_dummies выполняет одно горячее кодирование, если входные данные имеют одну категорию для каждого наблюдения (ваш случай). Для других случаев (несколько категорий на одно наблюдение) весь вопрос должен быть изменен по-другому (поскольку у вас не может быть одной категории только в имени столбца).

Комментарии:

1. спасибо @vladmihaisima, но каждый раз алгоритм выполняет другую модификацию, например 0_yassine_ или 0_0yassine. я не понимаю, почему это так

2. Как правило, вам не нужны имена столбцов. Если вы хотите получить исходные категории, вы используете inverse_transform. Это может помочь иметь узнаваемые имена столбцов (например, для отладки), и вы можете изменить их, если хотите, или использовать другую библиотеку. Я соответствующим образом отредактировал ответ.