如何在使用sklearn进行one-hot编码后给出列名?

Adi*_*ama 14 python encoding scikit-learn one-hot-encoding

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

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

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

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

编码后应该是这样的

A-1、A-2、A-3

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

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

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

Ven*_*lam 15

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

>>> ohenc.get_feature_names()
>>> x_cat_df.columns = ohenc.get_feature_names()
Run Code Online (Sandbox Code Playgroud)

详细示例在这里

  • `get_feature_names` 在 scikit-learn 1.2 中已弃用,请使用 `get_feature_names_out` 代替 (2认同)
  • 谢谢。我认为它在 v1.0 中已被弃用。[参考](https://scikit-learn.org/stable/whats_new/v1.0.html#version-1-0-0)。顺便说一句,1.2 版本还没有发布! (2认同)

小智 11

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

import pandas as pd
from sklearn.preprocessing import OneHotEncoder

train_X = pd.DataFrame({'Sex':['male', 'female']*3, 'AgeGroup':[0,15,30,45,60,75]})
Run Code Online (Sandbox Code Playgroud)
>>>
     Sex     AgeGroup
0    male         0
1  female        15
2    male        30
3  female        45
4    male        60
5  female        75
Run Code Online (Sandbox Code Playgroud)
>>>
     Sex     AgeGroup
0    male         0
1  female        15
2    male        30
3  female        45
4    male        60
5  female        75
Run Code Online (Sandbox Code Playgroud)
>>>
    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`
Run Code Online (Sandbox Code Playgroud)