【发布时间】:2021-01-09 11:06:28
【问题描述】:
我有一个数据框,其中包含一个包含分类变量的列,其中还包括 NaN。
Category
1 A
2 A
3 Na
4 B
我想使用sklearn.compose.make_column_transformer() 以干净的方式准备 df。我尝试使用以下代码估算 nan 值和 OneHotEncode 列:
from sklearn.preprocessing import OneHotEncoder
from sklearn.impute import SimpleImputer
from sklearn.compose import make_column_transformer
transformer= make_column_transformer(
(SimpleImputer(missing_values=np.nan, strategy='most_frequent'), ['Category']),
(OneHotEncoder(sparse=False), ['Category'])
)
在我的训练数据上运行转换器会提高
ValueError: 输入包含 NaN
transformer.fit(X_train)
X_train_trans = transformer.transform(X_train)
想要的输出应该是这样的:
A B
1 1 0
2 1 0
3 1 0
4 0 1
这提出了两个问题:
-
转换器是在原始数据上并行计算
SimpleImputer和OneHotEncoder,还是按照我在转换器中引入它们的顺序计算? -
如何更改我的代码以便
OneHotEncoder将估算值作为输入?我知道我可以用 pandas 在变压器之外通过两个不同的步骤解决它,但我希望代码采用干净的管道格式
【问题讨论】:
标签: python scikit-learn pipeline one-hot-encoding imputation