Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过df时带OneHotEncoder的列变压器问题_Python_Python 3.x_Dataframe_Pipeline - Fatal编程技术网

Python 通过df时带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

我目前正在尝试学习如何使用管道和列转换器,但在将它们应用到数据帧时遇到了困难。我正在制作一个Kaggle住房数据集,该数据集基于爱荷华州的住宅或类似的东西()。我已经用dataframe column means填充了Null值,对于有字符串的列,填充了“None”。我现在尝试创建一个columns transformer,使用以下方法将OneHotEncoder应用于只包含字符串对象的列:

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...']