在为sk learn编写第一条管道时,我偶然发现了一些问题,即只有一部分列被放入管道中:
mydf = pd.DataFrame({'classLabel':[0,0,0,1,1,0,0,0],
'categorical':[7,8,9,5,7,5,6,4],
'numeric1':[7,8,9,5,7,5,6,4],
'numeric2':[7,8,9,5,7,5,6,"N.A"]})
columnsNumber = ['numeric1']
XoneColumn = X[columnsNumber]
我使用functionTransformer
类似于:
这将导致:TypeError: 'list' object is not callable
当函数转换器被启用时。在
如果我像下面这样实例化一个ColumnExtractor
,则不会返回错误。但是functionTransformer
不是只针对像这样的简单情况,应该可以正常工作吗?在
class ColumnExtractor(TransformerMixin):
def __init__(self, columns):
self.columns = columns
def transform(self, X, *_):
return X[self.columns]
def fit(self, *_):
return self
FunctionTransformer
用于将函数“提升”为转换,我认为这有助于执行一些数据清理步骤。假设你有一个主要是数字数组,你想用一个转换器来转换它,如果它得到一个nan
(比如Normalize
),这个转换器就会出错。你可能会有类似的结果但是也许你认为
^{pr2}$fillna
只在一个转换中被需要,所以你不需要像上面那样使用fillna
,而是最终按你的要求进行规范化。然后您可以在更多的地方使用该代码片段,而不必在代码中使用
.fillna(0)
在您的示例中,传递的是
['numeric1']
,它是一个list
,而不是类似类型的df[['numeric1']]
的提取器。你可能想要的是更像但这仍然行不通,因为最终传递到FunctionTransformer的对象将是
np.array
,而不是DataFrame
。在为了对
DataFrame
的特定列执行操作,您可能需要使用类似sklearn-pandas的库,该库允许您按列定义特定的转换器。在相关问题 更多 >
编程相关推荐