Python使用Pandas合并多个DataFrame报on参数重复传值错误怎么办
报错原因
pandas.merge() 原生仅支持同时合并2个DataFrame,函数签名前两个固定位置参数为left(左表)、right(右表),后续位置参数会按顺序匹配到on、how等关键字形参上。
你在代码中一次性传入了4个DataFrame作为位置参数,其中第三个传入的HRDataSet2会被位置匹配到on形参,之后又显式传入on='EmployeeNumber',等于给on参数传递了两次值,因此抛出TypeError: merge() got multiple values for argument 'on'错误,并非代码中显式写了两个on参数。
可行解决方案
链式merge调用
每次merge操作返回的结果仍是DataFrame,可连续调用merge完成多表拼接,适合待合并表数量较少的场景,写法和pd.merge()效果完全一致:
FinalDf = HRTrainingData.merge(HRDataSet1, on='EmployeeNumber', how='outer')\ .merge(HRDataSet2, on='EmployeeNumber', how='outer')\ .merge(HRDataSet3, on='EmployeeNumber', how='outer')
借助functools.reduce批量合并
如果待合并的DataFrame数量较多,可将所有待合并表存入列表,通过reduce自动迭代完成合并,后续增删合并表仅需修改列表即可,维护成本更低:
from functools import reduce # 把所有需要合并的DataFrame按顺序放到列表中 merge_list = [HRTrainingData, HRDataSet1, HRDataSet2, HRDataSet3] FinalDf = reduce( lambda left_df, right_df: pd.merge(left_df, right_df, on='EmployeeNumber', how='outer'), merge_list )
补充说明
如果多个待合并表中,除关联键EmployeeNumber外存在其他同名字段,merge默认会为重复列添加_x、_y后缀做区分,可通过传入suffixes参数自定义后缀命名规则。
内容的提问来源于stack exchange,提问作者Brandi Austin
相关产品推荐
相关产品推荐

