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

Pandas中使用query方法传递datetime64类型时如何避免FutureWarning

解决Pandas query方法中datetime64[ns]类型的FutureWarning问题

问题背景

谷歌Colab更新后,使用Pandas的query方法操作datetime64[ns]类型字段时,若直接用字符串匹配会触发以下FutureWarning:

The behavior of 'isin' with dtype=datetime64[ns] and castable values (e.g. strings) is deprecated. In a future version, these will not be considered matching by isin. Explicitly cast to the appropriate dtype before calling isin instead.

示例数据:

import numpy as np
import pandas as pd
df = pd.DataFrame({'some_dates' :[pd.Timestamp('2024-09-30 00:00:00'),
                                  pd.Timestamp('2024-09-23 00:00:00')]})

通过df.dtypes可确认字段类型为datetime64[ns]。

可行解决方案

方案1:在query中用@pd.Timestamp()传递匹配日期

直接在query表达式中通过@符号调用pd.Timestamp生成匹配的datetime对象,彻底避免隐式类型转换:

# 无警告且执行正常
result = df.query("some_dates in [@pd.Timestamp('2024-09-30 00:00:00')]")
print(result)

方案2:提前定义datetime变量再引用

如果需要匹配多个日期或追求代码可读性,可先定义目标日期变量,再用@在query中引用:

# 匹配单个日期
target_date = pd.Timestamp('2024-09-30')
result = df.query("some_dates == @target_date")

# 匹配多个日期
target_dates = [pd.Timestamp('2024-09-30'), pd.Timestamp('2024-09-23')]
result = df.query("some_dates in @target_dates")

为什么其他方法不可行

  • 直接用字符串匹配:df.query("some_dates in ['2024-09-30']")会触发警告,因为Pandas将废弃字符串到datetime的隐式转换逻辑,未来版本将不再支持这种匹配方式。
  • 直接在query中用np.datetime64:df.query("some_dates in [np.datetime64('2024-09-30')]")会报UndefinedVariableError(query默认不识别全局的np模块);加@后df.query("some_dates in [@np.datetime64('2024-09-30')]")又会触发TypeError,因为numpy的datetime类型在query上下文里和Pandas的datetime64[ns]存在兼容性问题。

内容的提问来源于stack exchange,提问作者arnaud leclair

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 13:35:53