如何在一个热编码sklearn之后保留列的名称?

时间:2018-05-18 15:35:40

标签: python pandas scikit-learn data-science one-hot-encoding

我正在进行泰坦尼克式的讨价还价比赛,处理分类数据我将数据分成2组:一组用于数值变量,另一组用于分类变量。 使用sklearn对带有分类变量的集合进行一次热编码后,我尝试重新组合两个数据集,但由于分类集是一个ndarray而另一个是我使用的数据帧:

np.hstack((X_train_num, X_train_cat))

完美无缺,但我不再拥有变量的名称。

有没有其他方法可以在不使用pd.get_dummies()的情况下保持变量名称的同时执行此操作?

由于

3 个答案:

答案 0 :(得分:4)

尝试

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

答案 1 :(得分:2)

好吧,正如你在问题中所述,有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可以是您想要的任何字符串列表(具有适当的长度)。

答案 2 :(得分:1)

在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)