python-3.x - 如何将元组列表传递给python中的函数参数
问题描述
我有以下代码可以正常工作:
def func1():
return Pipeline([('cont_inf_replacer', replaceInf()),
])
make_column_transformer((func1(), features['cat1']),
(func2(), features['cat2']),
(func3(), features['cat3'])
)
现在,我想将函数参数作为变量传递
func_dict = {'cat1': func1, 'cat2':func2, 'cat3': func3}
for c in features.keys():
arg_tuple += (func_dict[c], features[c])
make_column_transformer(arg_tuple)
我希望 arg_tuple 应该扩展/解包到
func1(), features['cat1']),
(func2(), features['cat2']),
(func2(), features['cat3'])
但收到以下错误。我进行了搜索,但找不到合适的解决方案
ValueError: not enough values to unpack (expected 2, got 1)
这就是 make_column_transformer() 的定义方式:
make_column_transformer(*transformers, **kwargs)
使用 *arg_tuple 解包似乎可以(调用 make_column_transfer 时没有错误,但结果不同,见下文)
make_column_transformer((func1(),features['_cat_'])): output
ColumnTransformer(n_jobs=None, remainder='drop', sparse_threshold=0.3,
transformer_weights=None,
transformers=[('pipeline', Pipeline(memory=None,
steps=[('cont_inf_replacer', <__main__.replaceInf object at 0x7f87d19d6ba8>)]), ['cat1', 'cat2', 'cat3'])])
使用 *arg_tuple,
make_column_transformer(*arg_tuple)
ColumnTransformer(n_jobs=None, remainder='drop', sparse_threshold=0.3,
transformer_weights=None,
transformers=[('function', <function _pip_cont at 0x7f87d1a006a8>, ['cat1', 'cat2', 'cat3'])])
解决方案
- make_column_transformer(*arg_tuple) 将正确解包 ((),(),())
您应该尝试以下方法
pipline_step['cat1'] = [('test_pipeline', Pipeline([SimpleImputer(xxxxxxxx)]))] list_pipeline = Pipeline() list_pipeline.steps.append(pipeline)
因此,通过这种方式,您可以根据子集的可用性(在此示例中,cat1 可用)附加步骤,而不是 for 循环。您可以将子集名称作为键作为管道步骤传递。
推荐阅读
- c++ - 如何获取对创建“this”的实例的引用?
- linux - 如何在 Linux 上运行 selenium?
- performance - 根据用户类型访问页面
- google-analytics - 应用程序的谷歌分析活动 URL 是否计算安装或打开?
- android - 将应用程序发布到 Playstore 后,Firestore 文档未正确映射
- python-3.x - 如何为 Python PyBrain 安装 modulemesh 包
- amazon-web-services - 将自定义事件发布到 AWS CloudTrail
- python - Google Drive 中的文件作为 Collab 中的目录装载
- android - 运行我的应用程序模拟器给我错误
- javascript - 将组件转换为指令