如何在一次热编码 sklearn 后保留列名?

how to keep column's names after one hot encoding sklearn?

我正在参加 titanic kaggle 比赛,为了处理分类数据,我将数据分成两组:一组用于数值变量,另一组用于分类变量。 在使用 sklearn 对带有分类变量的集合进行热编码后,我尝试重新组合这两个数据集,但由于分类集是一个 ndarray 而另一个是我使用的数据框:

np.hstack((X_train_num, X_train_cat))

效果很好,但我不再有变量的名称了。

是否有另一种方法可以在不使用 pd.get_dummies() 的情况下维护变量名称?

谢谢

尝试

X_train = X_train_num.join(
   pd.DataFrame(X_train_cat, X_train_num.index).add_prefix('cat_')
)

好吧,正如您在问题中所说,pd.get_dummies,我认为这是这里的最佳选择。话虽如此,您可以使用

pd.concat([X_train_num, pd.DataFrame(X_train_cat, index=X_train_num.index)], axis=1)

如果愿意,您也可以使用

提供有用的列名
pd.concat([X_train_num, pd.DataFrame(X_train_cat, index=X_train_num.index, columns=cols)], axis=1)

cols 可以是您想要的任何字符串列表(适当长度)。

在 sklearn onehot 编码器中添加列

from sklearn.preprocessing import OneHotEncoder
OH_encoder = OneHotEncoder(handle_unknown='ignore', sparse=False)
OH_cols_train = pd.DataFrame(OH_encoder.fit_transform(dev_data[object_cols]))
OH_cols_valid = pd.DataFrame(OH_encoder.transform(test_data[object_cols]))

# Adding column names to the encoded data set.
OH_cols_train.columns = OH_encoder.get_feature_names(object_cols)
OH_cols_valid.columns = OH_encoder.get_feature_names(object_cols)

# One-hot encoding removed index; put it back
OH_cols_train.index = dev_data.index
OH_cols_valid.index = test_data.index

# Remove categorical columns (will replace with one-hot encoding)
num_X_train = dev_data.drop(object_cols, axis=1)
num_X_valid = test_data.drop(object_cols, axis=1)

# Add one-hot encoded columns to numerical features
dev_data = pd.concat([num_X_train, OH_cols_train], axis=1)
test_data = pd.concat([num_X_valid, OH_cols_valid], axis=1)