使用 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 是一个数据框,所以如果您将它作为管道的第一步,您还可以将它与后续的列转换器结合使用(当然如果需要的话)
是否有我可以使用或实现的 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 是一个数据框,所以如果您将它作为管道的第一步,您还可以将它与后续的列转换器结合使用(当然如果需要的话)