OneHotEncoder更改名称列

时间:2019-04-10 10:01:59

标签: python label categorical-data 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 :(得分: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将执行一种热编码。对于其他情况(每个观察结果有多个类别),应将整个问题更改为不同的(因为列名称中不能仅包含一个类别)。