【问题标题】:how to keep column's names after one hot encoding sklearn?如何在一次热编码 sklearn 后保留列名?
【发布时间】:2018-10-29 02:26:45
【问题描述】:

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

np.hstack((X_train_num, X_train_cat))

效果很好,但我不再知道变量的名称。

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    试试

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

    【讨论】:

    • 我认为这是更好的答案。 (好吧,我认为您应该使用pd.get_dummies,但除此之外,这是更好的答案。)
    • 谢谢@AmiTavory
    【解决方案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 可以是您想要的任何字符串列表(具有适当的长度)。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2017-12-18
        • 1970-01-01
        • 1970-01-01
        • 2020-05-13
        • 2020-10-28
        • 2020-08-05
        • 2017-06-04
        • 2020-11-09
        相关资源
        最近更新 更多