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