Pandas DataFrame用字典值查询日期区间报错原因及解决方法
问题分析与解决方法
报错原因
df.query()的执行上下文是DataFrame自身的命名空间,它默认只能识别DataFrame里的列名,没法直接访问你定义的Python全局/局部变量(比如start_date、end_date),所以会抛出UndefinedVariableError——这是query的设计特性,不是代码语法错误。
三种可行的解决方法
方法1:用@符号引入外部变量
这是query官方推荐的用法,在变量前加@就能让query识别到外部Python变量:
# 假设你的字典是date_dict,示例结构:date_dict = {'start':20020101, 'end':20101231} start_date = date_dict['start'] end_date = date_dict['end'] # 用@标记外部变量 filtered_df = df.query('@start_date <= Dates <= @end_date')
方法2:直接把字典值格式化到查询字符串里
跳过变量定义步骤,直接将字典中的日期值拼入query的字符串,相当于动态生成硬编码查询语句:
filtered_df = df.query(f"{date_dict['start']} <= Dates <= {date_dict['end']}")
方法3:放弃query,用布尔索引(更直观)
如果觉得query的命名空间规则麻烦,直接用布尔索引筛选,完全绕开这个问题:
filtered_df = df[(df['Dates'] >= date_dict['start']) & (df['Dates'] <= date_dict['end'])]
这种写法更符合Python常规逻辑,也不容易出现命名空间相关的问题。
内容的提问来源于stack exchange,提问作者ymmy
相关产品推荐
相关产品推荐

