import numpy as np
import pandas as pd
from sklearn.preprocessing import OneHotEncoder,StandardScaler
from sklearn.compose import ColumnTransformer, make_column_transformer
from sklearn.linear_model import LinearRegression
df = pd.DataFrame({'brand' : ['aaaa', 'asdfasdf', 'sadfds', 'NaN'],
'category' : ['asdf','asfa','asdfas','as'],
'num1' : [1, 1, 0, 0] ,
'target' : [0.2,0.11,1.34,1.123]})
train_continuous_cols = df.select_dtypes(include=["int64","float64"]).columns.tolist()
train_categorical_cols = df.select_dtypes(include=["object"]).columns.tolist()
preprocess = make_column_transformer(
(StandardScaler(),train_continuous_cols),
(OneHotEncoder(), train_categorical_cols)
)
df= preprocess.fit_transform(df)
只是尝试获取所有功能名称:
preprocess.get_feature_names()
获取此错误:
Transformer standardscaler (type StandardScaler) does not provide get_feature_names
我怎样才能解决它?在线示例使用管道,我试图避免这种情况
以下ColumnTransformer的重新实现返回一个数据帧。请注意,仅当您向管道输入数据帧时才应使用它
所有的荣誉都归于Johannes Haupt,他提供了
get_feature_names()
函数,该函数对没有该函数的变压器具有弹性(参见blogpostExtracting Column Names from the ColumnTransformer)。我注释掉了这些警告,因为我不想要它们,并且预先将转换步骤设置为列名;但你想怎么说就怎么说是很容易的然后可以将对
ColumnTransformer
的调用替换为对ColumnTransformerWithNames
的调用。输出是一个数据帧,此步骤现在有一个工作get_feature_names()
我假设您正在寻找访问transformer结果的方法,它生成一个numpy数组
ColumnTransformer有一个名为^{} 的属性:`
从文件中:
因此,不幸的是,这只提供了有关变压器本身及其应用到的列的信息,但不提供结果数据位置的信息,以下情况除外:
因此,我们知道输出列的顺序与transformers列表中指定列的顺序相同。另外,对于transformer步骤,我们还知道它们产生了多少列,因为StandardScaler()产生的列数与原始数据相同,OneHotEncoder()产生的列数等于类别数
这将产生以下输出:
相关问题 更多 >
编程相关推荐