如何使用ColumnTransformer API对单个pandas DataFrame列应用多个变换器?
例如,我希望对DataFrame中的一列进行立方根运算,然后标准化其值:
df = pd.DataFrame( np.array([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]), columns=['a', 'b', 'c'])transformer = ColumnTransformer( [ ('root3_std', StandardScaler() + FunctionTransformer(np.cbrt), 'a') <-- 伪代码 ], remainder='passthrough')
如果我这样写
transformer = ColumnTransformer( [ ('root3', FunctionTransformer(np.cbrt), 'a'), ('standardize', StandardScaler(), 'a') ], remainder='passthrough')
我会得到两列,一列是立方根,另一列是原始值的标准化结果。如何一次性应用两个变换器?
回答:
from sklearn.pipeline import Pipelineimport pandas as pdimport numpy as npfrom sklearn.preprocessing import FunctionTransformer, StandardScalerdf = pd.DataFrame(np.array([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]),columns=['a', 'b', 'c'])pipe = Pipeline([('function_transformer', FunctionTransformer(np.cbrt)), ('standard_scalar', StandardScaler())])pipe.fit_transform(df[['a']])#oparray([[-1.32381804], [ 0.23106179], [ 1.09275626]])