Python 通过df时带OneHotEncoder的列变压器问题
我目前正在尝试学习如何使用管道和列转换器,但在将它们应用到数据帧时遇到了困难。我正在制作一个Kaggle住房数据集,该数据集基于爱荷华州的住宅或类似的东西()。我已经用dataframe column means填充了Null值,对于有字符串的列,填充了“None”。我现在尝试创建一个columns transformer,使用以下方法将OneHotEncoder应用于只包含字符串对象的列:Python 通过df时带OneHotEncoder的列变压器问题,python,python-3.x,dataframe,pipeline,Python,Python 3.x,Dataframe,Pipeline,我目前正在尝试学习如何使用管道和列转换器,但在将它们应用到数据帧时遇到了困难。我正在制作一个Kaggle住房数据集,该数据集基于爱荷华州的住宅或类似的东西()。我已经用dataframe column means填充了Null值,对于有字符串的列,填充了“None”。我现在尝试创建一个columns transformer,使用以下方法将OneHotEncoder应用于只包含字符串对象的列: obj_list=[x for x in df.columns if (df[x].dtype!= np
obj_list=[x for x in df.columns if (df[x].dtype!= np.int) & (df[x].dtype!=np.float)] #Columns with non-numerical values
from sklearn.pipeline import make_pipeline
from sklearn.compose import make_column_transformer
ct=make_column_transformer((OneHotEncoder(),obj_list),remainder='passthrough') #Create a Column Transformer
pipe=make_pipeline(ct)
outcome=pipe.fit_transform(df.values)
但我收到一个值错误:
ValueError: Specifying the columns using strings is only supported for pandas DataFrames
如果改用数据帧:
outcome=pipe.fit_transform(df)
#I can now do
df_1=pd.DataFrame(outcome,columns=ct.get_feature_names())
我明白了
因为一个热的变压器似乎把所有的值集中到一列中。
column transformer功能保留,但看起来很时髦:
list(ct.get_feature_names())
#['onehotencoder__x0_C (all)', 'onehotencoder__x0...']
有人能看一看并解释一下为什么输出名称如此奇怪吗?
谢谢。问题是,一个热编码器实际上创建了一个np稀疏矩阵
list(ct.get_feature_names())
#['onehotencoder__x0_C (all)', 'onehotencoder__x0...']