You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas多表merge合并Holidays字段时触发KeyError报错如何解决

问题现象

将holidaydata的"Holidays"字段合并到主数据集masterdata时持续触发KeyError,使用的合并代码如下:

masterdata = cabdata.merge(transaction, on= 'Transaction ID').merge(customer, on ='Customer ID').merge(city, on = 'City').merge(holidaydata, on='Holidays')

报错核心信息:

KeyError: 'Holidays'

从报错栈可以定位到,pandas执行最后一步merge时,在左表中找不到名为Holidays的字段,直接抛出错误。

根因分析

链式merge的执行逻辑是:每一次.merge()的左表都是上一次merge返回的结果集。
代码执行到最后一步和holidaydata合并时,左表是cabdata、transaction、customer、city四张表合并后的结果,这个结果集里不存在Holidays字段——Holidays仅存在于待合并的右表holidaydata中。
on参数要求左右两表必须同时存在同名字段作为合并键,左表找不到对应字段自然触发KeyError。
绝大多数场景下,节假日表是通过日期字段和业务表关联,不是直接用Holidays字段本身做关联键,直接指定on='Holidays'本身逻辑也存在问题。

修复步骤
  • 先打印所有待合并表的字段列表,确认关联关系,同时排查是否存在字段名前后带空格、拼写不一致的问题:
print(cabdata.columns.tolist())
print(transaction.columns.tolist())
print(customer.columns.tolist())
print(city.columns.tolist())
print(holidaydata.columns.tolist())
  • 找到前三张表合并结果中代表业务日期的字段(常见命名如Trip Date、Order Date),以及holidaydata中对应的日期字段,分别指定左右表关联键完成合并,不要直接用on='Holidays'。参考代码如下:
# 先完成前三张表的合并
temp_df = cabdata.merge(transaction, on='Transaction ID')\
                 .merge(customer, on='Customer ID')\
                 .merge(city, on='City')

# 指定左右表各自的关联字段完成节假日数据合并
masterdata = temp_df.merge(
    holidaydata,
    left_on='temp_df中对应的日期字段名', # 替换为实际业务日期字段名,例如'Trip Date'
    right_on='holidaydata中对应的日期字段名', # 替换为节假日表的日期字段名,例如'Calendar Date'
    how='left' # 保留全部业务数据,匹配不到节假日的记录自动填充空值
)

如果排查后发现Holidays字段确实存在于前序表中,基本是字段名存在拼写误差、前后带不可见空格的问题,通过第一步打印列名的操作就能直接定位修正。

内容的提问来源于stack exchange,提问作者kashish1928

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 19:33:23