You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中df.query()格式化datetime对象传参报语法错误问题

报错原因

f-string插值写法报错的核心原因是字符串引号丢失:你硬编码能正常运行的写法里,日期值2001-01-01是被单引号包裹的字符串字面量,而f-string直接插值{m}时,只会把变量里的字符串内容插进去,不会自动带外层引号,最终query解析器拿到的表达式是2001-01-01<eventdate,会被识别成算术减法运算,自然触发语法错误。

你之前尝试的@ts({m})写法同理,插值后{m}没有引号包裹,ts()调用拿到的不是合法的字符串入参,同样会解析失败。

可行解决方案

优先用pandas.query原生支持的@变量引用语法,不需要手动拼接字符串,完全规避引号转义问题:

  • 直接@引用外部日期字符串,pandas会自动做日期类型匹配
m = '2001-01-01'
df.query("@m < eventdate")
  • 外部先构造好Timestamp对象,再@引用,类型更明确不会出现隐式转换问题
import pandas as pd
m = pd.Timestamp('2001-01-01')
df.query("@m < eventdate")
  • 如果一定要用f-string拼接,记得给插值的字符串补上外层单引号,和硬编码的写法格式保持一致
m = '2001-01-01'
df.query(f"'{m}' < eventdate")

注:以上写法对MultiIndex中的列eventdate同样生效,只要列名拼写正确即可正常过滤。

内容的提问来源于stack exchange,提问作者Expectation mean first moment

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:21:14