Pandas merge后筛选_merge字段报KeyError: 'right_only'/'both'问题求解
问题原因
错误出在loc筛选的条件语句上,Python中比较运算符==的优先级高于三元表达式,你写的逻辑不会按照预期执行:
实际运行时会先计算comparison_result['_merge'] == 'left_only'得到布尔值,再判断如果compare_type == 'l'就返回这个布尔值,否则直接返回字符串'right_only'或'both'。
当compare_type为r或b时,你传给loc的是字符串而非布尔筛选序列,pandas会把字符串当做行索引查找,自然抛出KeyError。
修复方案
把三元表达式整体用括号包裹,调整运算优先级即可,修改后的筛选代码如下:
comparison_result = comparison_result.loc[comparison_result['_merge'] == ('left_only' if (compare_type == 'l') else 'right_only' if (compare_type == 'r') else 'both')]
修改后三种比对模式都可以正常运行:
compare_type='l':筛选仅在左表存在的记录compare_type='r':筛选仅在右表存在的记录compare_type='b':筛选两表共有的匹配记录
内容的提问来源于stack exchange,提问作者Arie
相关产品推荐
相关产品推荐

