我正在尝试使用功能联合将我的差异管道全部部署在一起,除了一个问题之外,其他所有东西都可以正常工作。
在我的DataFrame中,我有一个列ID,我希望在所有管道中保持不变。我必须将其提供给管道,因为我应用了一种热编码和其他内容,我不能只将其合并回最后。
scaler_pipeline = Pipeline([
('selector', DataFrameSelector(col_scalar)),
('imputer', SimpleImputer(strategy="median")),
('std_scaler', StandardScaler())
])
one_hot_pipeline = Pipeline([
('selector', DataFrameSelector(col_one_hot)),
('imputer', SimpleImputer(strategy="most_frequent")),
('one_hot', OneHotEncoder())
])
full_pipeline = FeatureUnion(transformer_list=[
("DataFrameSelector", DataFrameSelector(immutable_col)),
("scaler_pipeline", scaler_pipeline),
("one_hot_pipeline", one_hot_pipeline),
])
我的DataFrameSelector就是这样:
class DataFrameSelector(BaseEstimator, TransformerMixin):
def __init__(self, attribute_names):
self.attribute_names = attribute_names
def fit(self, X, y=None):
return self
def transform(self, X):
return X[self.attribute_names]
[“ full_pipeline”的开头,我想选择一些列(此处的ID),并保留它而不触动它。
现在我收到此错误
TypeError:不支持类型转换:(dtype('O'),dtype('float64'),dtype('float64'))
谢谢。
您可以将ColumnTransformer
与remainder='passthrough'
结合使用,以使变压器适合所选的列,而其他列保持不变。