自定义Python函数加载多个pandas DataFrame参数报错如何解决?
可行解决方案
- 方案一:修改
load_data为可变参数函数
直接将函数入参改为可变位置参数*args,可适配任意数量的输入DataFrame,无需固定入参个数,原有调用逻辑无需调整即可兼容。参考实现:
def load_data(*dfs, merge_on="common_id"): from functools import reduce import pandas as pd return reduce(lambda left, right: pd.merge(left, right, on=merge_on, how="left"), dfs)
如果需要单独控制segments过滤相关参数,可在可变参数前保留固定参数位即可。
- 方案二:扩展
load_data入参列表,新增参数设置默认值
在原5个入参基础上补充2个和segments过滤相关的参数,设置默认值为None,既适配现有新的7参数调用,也不会影响历史的5参数调用逻辑。参考定义:
# 新增segments_filter、segments_range两个参数,默认None不启用过滤 def load_data(coords, population, ambul_praxen, docs_matrix, weights, segments_filter=None, segments_range=None): # 新增过滤逻辑 if segments_filter and segments_range: docs_matrix = load_docs_matrix(segments=segments_range) # 原有合并逻辑 merged = coords.merge(population, on="region_id")\ .merge(ambul_praxen, on="region_id")\ .merge(docs_matrix, on="region_id")\ .merge(weights, on="region_id") return merged
- 方案三:调用侧打包参数适配原有函数定义
不想修改load_data原有逻辑的情况下,可将多个同类型的数据集打包为列表传入原有参数位,函数内部遍历列表完成合并即可。调用示例:
# 把新增的2个数据集打包进列表,传入第5个参数位 extra_dfs = [filtered_docs_matrix, other_new_df] load_data(coords, population, ambul_praxen, weights, extra_dfs)
内容的提问来源于stack exchange,提问作者kukulu
相关产品推荐
相关产品推荐

