Python 3.x 如何根据可用性将sklean pipeline应用于功能列表

Python 3.x 如何根据可用性将sklean pipeline应用于功能列表,python-3.x,scikit-learn,Python 3.x,Scikit Learn,我有一个熊猫数据框,有10个特性(例如,所有浮动)。鉴于特征的不同特征(例如,平均值),数据帧可分为4个子集:平均值=100 对于每个子集,将应用不同的管道,但是,它们可能并不总是可用的,例如,数据集可能只包含mean将不同转换应用于不同特征集的方法是通过ColumnTransformer[1]。然后,您可以创建一个包含列名的列表,这些列名可以根据您想要的条件进行填充。然后,每个变压器将采用每个列表中列出的列,例如cols\u mean\u lt0=[…],等等 话虽如此,你的方法在我看来并不好

我有一个熊猫数据框,有10个特性(例如,所有浮动)。鉴于特征的不同特征(例如,平均值),数据帧可分为4个子集:平均值=100


对于每个子集,将应用不同的管道,但是,它们可能并不总是可用的,例如,数据集可能只包含mean将不同转换应用于不同特征集的方法是通过
ColumnTransformer
[1]。然后,您可以创建一个包含列名的列表,这些列名可以根据您想要的条件进行填充。然后,每个变压器将采用每个列表中列出的列,例如
cols\u mean\u lt0=[…]
,等等

话虽如此,你的方法在我看来并不好。您可能希望缩放特征,使其具有相同的平均值和标准。根据您将使用的算法,这可能是强制性的,也可能不是强制性的

[1]

编辑:

获取
转换器
,它是名称、元组和列的元组。您想要的是有多个变压器,每个变压器将处理不同的列。元组中的列可以用“string或int、类似数组的string或int、slice、布尔掩码数组或callable”表示。这里是我建议您传递列列表的地方

这样,你就可以有三个变压器,每一个都对应一个。现在,要指示希望每个转换器处理哪些列,只需创建三个列表,每个转换器一个。每列都将对应于其中一个列表。这很简单。在循环中,您可以检查每个列的平均值,然后将列名附加到对应于相应转换器的列表中


希望这有帮助

谢谢你的回答。实际上,我使用make_column_transformer,它是ColumnTransformer的缩写。我的问题与子集的类型无关(它可以是10个分类特征,每个特征应用于不同的管道,最终形成一个长长的子集组合可能性列表)。问题是如何根据子集的可用性动态调用Transformer,而不使用这个嵌套if-elseedite答案的大列表。我希望现在可以清楚地知道,如何根据子集的可用性动态调用Transformer,而不必使用这个嵌套if-else的大列表。
if subset1 exists:
    make_column_transformer(pipeline1, subset1)
elif subset2 exists:
    make_column_transformer(pipeline2, subset2)
elif subset3 exists:
    make_column_transformer(pipeline3, subset3)
elif subset1 and subset 2 exists
    make_column_transformer([(pipeline1, subset1), (pipeline2, subset2)]
elif subset3 and subset 2 exists
    make_column_transformer([(pipeline3, subset3), (pipeline2, subset2)]
elif subset1 and subset 3 exists
    make_column_transformer([(pipeline1, subset1), (pipeline3, subset3)]
elif subset1 and subset2 and subset3 exists:
    make_column_transformer([(pipeline1, subset1), (pipeline2, subset2), (pipeline3, subset3)]