我在使用泰坦尼克号数据集构建机器学习模型时,使用了OneHotEncoder来创建Embarked的虚拟变量,但在此过程中我的列标题丢失了。以下是数据集在处理前的样貌。
Pclass Sex Age SibSp Parch Fare Cabin Embarked0 3 1 22.000000 1 0 7.2500 146 21 1 0 38.000000 1 0 71.2833 81 02 3 0 26.000000 0 0 7.9250 146 23 1 0 35.000000 1 0 53.1000 55 24 3 1 35.000000 0 0 8.0500 146 2... ... ... ... ... ... ... ... ...886 2 1 27.000000 0 0 13.0000 146 2887 1 0 19.000000 0 0 30.0000 30 2888 3 0 29.699118 1 2 23.4500 146 2889 1 1 26.000000 0 0 30.0000 60 0890 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 160 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.01 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.02 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.03 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.04 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.0887 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.0888 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.0889 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.0890 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
回答:
你可以使用ColumnTransformer
的get_feature_names
方法,前提是所有你的变换器都支持该方法,并且你已经在数据框上进行了训练。
ct = ColumnTransformer([('encoder', OneHotEncoder(), [7])], remainder='passthrough')X = pd.DataFrame(ct.fit_transform(X), columns=ct.get_feature_names())X