You need to enable JavaScript to run this app. pandas DataFrame过滤拼接查询条件返回0行空结果问题求助
优惠活动
大模型
产品
解决方案
定价
更多

pandas DataFrame过滤拼接查询条件返回0行空结果问题求助

问题根因定位
  • 重复过滤冲突:生成初始query时未排除SR_Quarter字段,若用户输入季度范围,初始query会生成 `SR_Quarter` == "xxxx to xxxx" 的匹配条件,要求字段值完全匹配带"to"的整段字符串,与后续拼接的范围条件互斥,无数据可同时满足两个条件,因此返回空结果。
  • 范围条件语法错误:将" to "替换为范围符号后,前后的季度值未加引号,pandas的query语法会将其识别为变量而非字符串常量,导致匹配失效。
  • 无效逻辑:if sr == "": query 行未执行任何赋值操作,属于无意义代码。
修复方案

修正后代码如下:

filter_dict = {  
    'Node': str(input("Enter a value for Node:      ")), # 输入示例:12nm
    '`Issue Type`': str(input("Enter a value for Issue Type:      ")),
    '`Status`': str(input("Enter a value for Status:      ")),
    '`SR_Quarter`': str(input("Enter a value for SR_Quarter:      "))# 输入示例为 '2020-Q4' to '2021-Q2'
}

# 生成基础过滤条件时排除季度字段,避免重复过滤
query = ' & '.join([f'{k} == "{v}"' for k, v in filter_dict.items() if k != '`SR_Quarter`' and v != ""])

sr_input = filter_dict['`SR_Quarter`']
if sr_input.strip() != "":
    # 处理季度过滤逻辑
    if ' to ' in sr_input:
        start_quarter, end_quarter = sr_input.split(' to ', 1)
        # 给季度值加双引号,符合query语法要求
        sr_condition = f'`SR_Quarter` >= "{start_quarter.strip()}" & `SR_Quarter` <= "{end_quarter.strip()}"'
    else:
        # 兼容单个季度精确匹配场景
        sr_condition = f'`SR_Quarter` == "{sr_input.strip()}"'
    # 拼接条件,避免前置多余的&符号
    if query:
        query = f"{query} & {sr_condition}"
    else:
        query = sr_condition

df.query(query)
效果说明
  • 消除了重复条件冲突,仅单独处理季度字段的过滤逻辑
  • 所有字符串匹配值都添加了引号,符合pandas query语法规范
  • 兼容单字段过滤、多字段组合过滤的所有场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 01:33:01