我正在学习使用管道,因为它们看起来更干净。所以,我正在参与 Kaggle 上的表格操场比赛。
我正在尝试遵循一个非常简单的管道,在该管道中,我使用 aFunctionTransformer
将新列添加到数据框中,执行Ordinal Encoding
并最终将数据拟合到LinearRegression
模型上。
这是代码:
def weekfunc(df):
print(df)
df = pd.to_datetime(df)
df['weekend'] = df.dt.weekday
df['weekend'].replace(range(5), 0, inplace = True)
df['weekend'].replace([5,6], 1, inplace = True)
get_weekend = FunctionTransformer(weekfunc)
col_trans = ColumnTransformer([
('weekend transform', get_weekend,['date']),
('label encoding', OrdinalEncoder(), ['country', 'store', 'product'])
])
pipe = Pipeline([
('label endoer', col_trans),
('regression', LinearRegression())
])
pipe.fit(X_train,y_train)
但代码在第一步 ( FunctionTransformer
) 中断并给我以下错误:
to assemble mappings requires at least that [year, month, day] be specified:
[day,month,year] is missing
这很奇怪,因为我可以在正在执行的函数中打印,这表明它是datetime
格式的。甚至get_weekend.transform(X_train['date'])
按预期工作。但是当所有步骤都加入时,它似乎不起作用。