Python OneHotEncoder条带化标头
我正试图在泰坦尼克号数据集中制作一个ML模型,在准备的时候,我使用了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.
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来重命名这些列。