Pandas df.query结合simple_term_menu筛选时触发KeyError求助
问题解决:df.query调用报错KeyError的排查与修复
问题根源
你在生成查询字符串时,额外给整个表达式套了一层单引号,导致df.query错误地将整个字符串当成列名去查找,触发了KeyError。
硬编码的有效查询字符串是Name=="Tom" or Name=="Bob",而你通过queryStr= "'{}'".format(queryStr)处理后,实际字符串变成了'Name=="Tom" or Name=="Bob"'(注意外层的单引号),df.query会尝试寻找名为Name=="Tom" or Name=="Bob"的列,这显然不存在。
修复后的代码
去掉多余的单引号包裹步骤即可:
arrTemp=['Tom', 'Bob', 'Karen', 'Bill', 'Stefan', 'Jack', 'Debbie'] terminal_menu = TerminalMenu(arrTemp, multi_select=True, show_multi_select_hint=True, ) menu_entry_indices = terminal_menu.show() # 直接生成查询表达式,无需额外添加外层单引号 queryStr = ' or '.join([f'Name=="{v}"' for v in terminal_menu.chosen_menu_entries]) subs = df.query(queryStr)
验证说明
修复后生成的queryStr和硬编码的有效查询字符串完全一致,df.query能够正确解析表达式,筛选出符合条件的行。
内容的提问来源于stack exchange,提问作者Allen
相关产品推荐
相关产品推荐

