Python OneHotEncoder更改名称列

Python OneHotEncoder更改名称列,python,label,categorical-data,one-hot-encoding,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 = ['

我使用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

谢谢

您可以根据需要更改列的名称。要删除“0”,您可以执行以下操作,例如:

label_fournisseur.columns = [ x[2:] for x in label_fournisseur.columns ]
获取所需内容的另一种方法(无需另一个库):

结果:

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

注意:如果每个观察(您的案例)的输入有一个类别,get_dummies会执行一个热编码。对于其他情况(每次观察有多个类别),整个问题应更改为不同的(因为列名中不能只有一个类别)。

您可以根据需要更改列名。要删除“0”,您可以执行以下操作,例如:

label_fournisseur.columns = [ x[2:] for x in label_fournisseur.columns ]
获取所需内容的另一种方法(无需另一个库):

结果:

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

注意:如果每个观察(您的案例)的输入有一个类别,get_dummies会执行一个热编码。对于其他情况(每次观察多个类别),整个问题应更改为不同的(因为列名中不能只有一个类别)。

谢谢@vladmihaisima,但每次算法都会进行另一次修改,如0_yassine_或0_0yassine。我不明白为什么一般来说,你不需要列名。如果要检索初始类别,请使用逆变换。拥有可识别的列名(例如用于调试)会有所帮助,如果需要,您可以更改列名,或者使用其他库。我已经相应地编辑了答案。谢谢@vladmihaisima,但每次算法都会进行另一次修改,如0_yassine_或0_0yassine。我不明白为什么一般来说,你不需要列名。如果要检索初始类别,请使用逆变换。拥有可识别的列名(例如用于调试)会有所帮助,如果需要,您可以更改列名,或者使用其他库。我已相应地编辑了答案。