我正在进行泰坦尼克式的讨价还价比赛,处理分类数据我将数据分成2组:一组用于数值变量,另一组用于分类变量。 使用sklearn对带有分类变量的集合进行一次热编码后,我尝试重新组合两个数据集,但由于分类集是一个ndarray而另一个是我使用的数据帧:
np.hstack((X_train_num, X_train_cat))
完美无缺,但我不再拥有变量的名称。
有没有其他方法可以在不使用pd.get_dummies()的情况下保持变量名称的同时执行此操作?
由于
答案 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)