如何在使用 sklearn 进行单热编码后给出列名?

新手上路,请多包涵

这是我的问题,我希望有人能帮我弄清楚..

解释一下,我的数据集中有 10 多个分类列,每个列都有 200-300 个类别。我想将它们转换成二进制值。为此,我使用第一个标签编码器将字符串类别转换为数字。标签编码器代码和输出如下所示。

https://i.stack.imgur.com/MIVHV.png

在 Label Encoder 之后,我再次使用了来自 scikit-learn 的 One Hot Encoder,它成功了。但问题是,我需要一个热编码器后的列名称。例如,A 列在编码之前具有分类值。 A = [1,2,3,4,..]

编码后应该是这样的,

A-1, A-2, A-3

任何人都知道如何在一次热编码后将列名分配给(旧列名 - 值名称或数字)。这是我的一个热编码及其输出;

https://i.stack.imgur.com/kgrNa.png

我需要带有名称的列,因为我训练了一个人工神经网络,但每次出现数据时,我都无法一次又一次地转换所有过去的数据。所以,我想每次都添加新的。还是谢谢。。

原文由 Aditya Pratama 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

您可以使用 .get_feature_names() 属性获取列名。

 >>> ohenc.get_feature_names()
>>> x_cat_df.columns = ohenc.get_feature_names()

详细示例在 这里

更新

从 1.0 版开始,使用 get_feature_names_out

原文由 Venkatachalam 发布,翻译遵循 CC BY-SA 4.0 许可协议

这个例子可以帮助未来的读者:

 import pandas as pd
from sklearn.preprocessing import OneHotEncoder

train_X = pd.DataFrame({'Sex':['male', 'female']*3, 'AgeGroup':[0,15,30,45,60,75]})

 >>>
     Sex     AgeGroup
0    male         0
1  female        15
2    male        30
3  female        45
4    male        60
5  female        75

 encoder=OneHotEncoder(sparse=False)

train_X_encoded = pd.DataFrame (encoder.fit_transform(train_X[['Sex']]))

train_X_encoded.columns = encoder.get_feature_names(['Sex'])

train_X.drop(['Sex'] ,axis=1, inplace=True)

OH_X_train= pd.concat([train_X, train_X_encoded ], axis=1)

 >>>
    AgeGroup  Sex_female  Sex_male
0         0         0.0       1.0
1        15         1.0       0.0
2        30         0.0       1.0
3        45         1.0       0.0
4        60         0.0       1.0
5        75         1.0       0.0`

原文由 Lucas Bend 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题