Python OneHotEncoder条带化标头

Python OneHotEncoder条带化标头,python,pandas,machine-learning,scikit-learn,Python,Pandas,Machine Learning,Scikit Learn,我正试图在泰坦尼克号数据集中制作一个ML模型,在准备的时候,我使用了OneHotEncoder制作了装载的假人,在制作过程中,我丢失了我的列标题。 下面是数据集以前的样子 Pclass Sex Age SibSp Parch Fare Cabin Embarked 0 3 1 22.000000 1 0 7.2500 146 2 1 1 0 38.000000 1 0 71.2833 81 0 2 3 0 26.

我正试图在泰坦尼克号数据集中制作一个ML模型,在准备的时候,我使用了OneHotEncoder制作了装载的假人,在制作过程中,我丢失了我的列标题。 下面是数据集以前的样子

Pclass  Sex Age SibSp   Parch   Fare    Cabin   Embarked
0   3   1   22.000000   1   0   7.2500  146 2
1   1   0   38.000000   1   0   71.2833 81  0
2   3   0   26.000000   0   0   7.9250  146 2
3   1   0   35.000000   1   0   53.1000 55  2
4   3   1   35.000000   0   0   8.0500  146 2
... ... ... ... ... ... ... ... ...
886 2   1   27.000000   0   0   13.0000 146 2
887 1   0   19.000000   0   0   30.0000 30  2
888 3   0   29.699118   1   2   23.4500 146 2
889 1   1   26.000000   0   0   30.0000 60  0
890 3   1   32.000000   0   0   7.7500  146 1

这是代码

ct = ColumnTransformer([('encoder', OneHotEncoder(), [7])], remainder='passthrough')
X = pd.DataFrame(ct.fit_transform(X))
X
下面是数据集现在的样子

0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16
0   1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 3.0 1.0 22.000000   1.0 7.2500  146.0
1   0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 38.000000   1.0 71.2833 81.0
2   1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 3.0 0.0 26.000000   0.0 7.9250  146.0
3   1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 35.000000   1.0 53.1000 55.0
4   1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 3.0 1.0 35.000000   0.0 8.0500  146.0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
886 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 2.0 1.0 27.000000   0.0 13.0000 146.0
887 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 19.000000   0.0 30.0000 30.0
888 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 3.0 0.0 29.699118   1.0 23.4500 146.0
889 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 26.000000   0.0 30.0000 60.0
890 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 3.0 1.0 32.000000   0.0 7.7500  146.0
数组的输出类似于
形状(n个样本、n个分量之和)的
X_t{类数组、稀疏矩阵}

(与数据帧不同)


因此没有标题。如果需要标题,则必须在重建数据帧时对其进行命名。

您可以使用
ColumnTransformer
get\u功能\u names
方法,前提是您的所有转换器都支持该方法,并且您已经接受过数据帧方面的培训

ct=ColumnTransformer([('encoder',onehotcoder(),[7]),余数='passthrough')
X=pd.DataFrame(ct.fit\u transform(X),columns=ct.get\u feature\u names())
X

默认情况下,新列名类似于编码器\uuux0\u0。我应该怎么做才能使它们与分类变量相同?啊,对了,这是当前实现中的一个不幸问题
onehotcoder.get\u feature\u names
需要一个参数
input\u features
作为“基本”名称,但是
ColumnTransformer.get\u feature\u names
不适用于此。(他们一直在研究各种功能名称的方法,希望很快这会更顺利地工作。)你可以通过在
OneHotEncoder
周围使用猴子补丁或包装自定义类的方式将一些东西拼凑在一起;更基本的是,我想,您可以用列名替换
x{I}
的regexp来重命名这些列。