使用 scikit-learn 预处理器选择 pandas 数据框中的行子集

use*_*827 6 python scikit-learn

是否有我可以使用或实现的 scikit-learn 预处理器来从 pandas 数据框中选择行的子集?我更喜欢预处理器来执行此操作,因为我想以此为步骤构建一个管道。

Sim*_*awe 5

您可以使用 aFunctionTransformer来做到这一点。对于 FunctionTransformer,您可以传递任何公开与标准 scikitlearn 转换调用相同的接口的 Callable。在代码中

import pandas as pd
from sklearn.preprocessing import FunctionTransformer

class RowSelector:
    def __init__(self, rows:list[int]):
        self._rows = rows

    def __call__(self, X:pd.DataFrame, y=None) -> pd.DataFrame:
        return X.iloc[self._rows,:]

selector = FunctionTransformer(RowSelector(rows=[1,3]))
df = pd.DataFrame({'a':range(4), 'b':range(4), 'c':range(4)})
selector.fit_transform(df)
#Returns
   a  b  c
1  1  1  1
3  3  3  3
Run Code Online (Sandbox Code Playgroud)

并非如此,我使用了一个可调用对象来跟踪某些状态,即要选择的行。这是没有必要的,可以通过不同的方式解决。

最酷的是它返回一个数据帧,因此如果您将其作为管道的第一步,您还可以将其与后续的列转换器结合起来(当然如果需要的话)