如何将变量传入Pandas merge函数的left_on参数?
问题原因
你对pandas的merge方法left_on/right_on参数的传值要求理解有误,同时混淆了「逗号分隔的单个字符串」和「多字符串组成的列表」两种数据格式:
- 错误写法里的
on_left = "id,flg_active"是单个字符串,外层套[]之后传给left_on的实际值是["id,flg_active"](长度为1的列表),pandas会尝试在左表中找列名是id,flg_active这一整串的字段,你的左表里显然不存在这个名字的列,因此抛出KeyError。 - 写死可运行的写法里,
left_on=['id','flg_active']是长度为2的列表,两个元素分别对应两个关联列的列名,符合merge的参数要求,因此可以正常运行。
优化解决方案
除了你补充的逐个append的写法之外,还可以直接用字符串的split方法快速生成符合要求的列表,代码更简洁:
on_left = "id,flg_active".split(',') on_right = "id_test,flg_new_active".split(',') result = pd.merge(left, right, how= how.lower(), left_on=on_left,right_on=on_right)
split(',')会按照逗号把原字符串切割成由多个子串组成的列表,刚好匹配left_on/right_on需要的传值格式。
内容的提问来源于stack exchange,提问作者dogshort
相关产品推荐
相关产品推荐

