使用 scikit-learn 预处理器对 pandas 数据帧中的 select 行子集

using scikit-learn preprocesser to select subset of rows in pandas dataframe

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

您可以使用 FunctionTransformer 来做到这一点。对于 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

不是那样,我使用了一个可调用对象来跟踪某些状态,即要选择的行。这不是必需的,可以用不同的方式解决。

很酷的是它 returns 是一个数据框,所以如果您将它作为管道的第一步,您还可以将它与后续的列转换器结合使用(当然如果需要的话)