ColumnTransformer返回
numpy.array,因此它不能具有列属性(如您的错误所示)。
如果我建议使用其他解决方案,将其
pandas用于您的两个任务,将会更容易。
第1步-替换缺失值
要用
missing_value字符串替换列子集中的缺失值,请使用以下命令:
dataframe[["PoolQC", "Alley"]].fillna("missing_value", inplace=True)对于其余的(用每列的平均值进行插补),这将完美地工作:
dataframe[["Street", "MSZoning", "LandContour"]].fillna( dataframe[["Street", "MSZoning", "LandContour"]].mean(), inplace=True)
第2步-一种热编码和分类变量
pandas提供
get_dummies,它返回的是熊猫Dataframe,而不同于
ColumnTransfomer,代码如下:
enpred = pd.get_dummies(dataframe[['MSZoning', 'LandContour']], drop_first=True)pd.dropna(['MSZoning', 'LandContour'], axis=columns, inplace=True)dataframe = dataframe.join(enpred)
对于序数变量及其编码,我建议您看一下这个SO答案(不幸的是,在这种情况下,需要一些手动映射)。
如果仍然要使用变压器
np.array使用
values属性从数据框获取,通过管道传递它,然后从数组中重新创建列和索引,如下所示:
pd.Dataframe(data=your_array, index=np.arange(len(your_array)), columns=["A", "B"])
但是,这种方法有一个警告:您将不知道自定义创建的一键编码列的名称(管道不会为您完成此操作)。
另外,您可以从sklearn的转换对象中获取列的名称(例如,使用
categories_属性),但我认为这会中断管道(如果我错了,请纠正我)。



