执行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