执行sklearn Column Transformer后如何获取新列的名称

Posted

技术标签:

【中文标题】执行sklearn Column Transformer后如何获取新列的名称【英文标题】:How to get the names of the new columns after performing sklearn Column Transformer 【发布时间】:2021-03-28 09:35:07 【问题描述】:
preprocessor = ColumnTransformer(
    [
        ('num', StandardScaler(), numeric_features),
        ('cat', OneHotEncoder(handle_unknown='ignore'), categorical_features)
    ]
)

我想对一些数字属性和一些分类特征执行转换。

运行:test=preprocessor.fit_transform(X_train) 返回一个没有列名的 numpy 数组。

根据文档,ColumnTransformer 应该具有函数 get_feature_names(),它将返回新功能的名称。但是,当我运行它时,我得到:

AttributeError: Transformer num (type StandardScaler) does not provide get_feature_names.

我想动态获取列的名称,因为我事先不知道类别的数量。

【问题讨论】:

【参考方案1】:

ColumnTransformer 按照它们在数据框中定义的相同顺序获取列,因此您可以考虑使用 pandas select_dtypes 从数据框中获取它们。假设您的数据包含在 df 中:

numeric_columns = list(df.select_dtypes('number'))
categorical_columns = list(df.select_dtypes('object')) + list(df.select_dtyes('category'))

【讨论】:

我的数据最初是在一个数据框中,但是转换返回一个 numpy 数组并且 One hot encoding 创建新列

以上是关于执行sklearn Column Transformer后如何获取新列的名称的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在sklearn中的LabelBinarizer Transform之后跟踪哪个DataFrame Column对应于哪个Array Column?

sklearn.compose.make_column_transformer():在一个数据帧列上一步使用 SimpleImputer() 和 OneHotEncoder()

网格搜索 SVM-anova 的超参数并在 Sklearn 中获得选择的特征

react-native 捆绑失败:错误:找不到模块 /metro-react-native-babel-transformer/src/index.js

2D转换下的zoom和transfor:scale的区别

sklearn 的标准 DBSCAN 怎么跑得这么快?