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

使用datetime列双条件筛选DataFrame遇datetime64类型错误求助

解决Pandas筛选datetime列时的TypeError问题

首先先搞懂datetime64是什么:

  • datetime64是NumPy和Pandas专门设计的时间数据类型,比Python原生的datetime对象效率高得多,特别适合处理大规模时间序列数据。你看到的datetime64[ns]表示这个时间类型精确到纳秒,这也是Pandas默认的时间存储格式。

接下来分析你遇到的错误原因:
你的代码出错是布尔运算符优先级的问题!在Python里,&(按位与)的优先级比>=/<=这些比较运算符更高。所以你的代码会先执行one_hour_ago & my_df['Date'],这就试图把一个datetime值和datetime类型的Series做按位运算,Pandas自然会报错——它没办法把datetime64[ns]类型转换成布尔值来完成这个运算。

正确的写法有两种:

  1. 给每个比较条件单独加括号,确保先完成比较,再做逻辑与:
my_df = my_df[(my_df['Date'] >= one_hour_ago) & (my_df['Date'] <= current_time)]

(注意:这里两个条件都要套括号,缺一不可!)

  1. 用Pandas内置的between()方法,这种写法更简洁,还能避免优先级问题:
my_df = my_df[my_df['Date'].between(one_hour_ago, current_time)]

另外还要确认一点:one_hour_ago和current_time的类型要和my_df['Date']一致,都是datetime64[ns]类型。如果它们是Python原生的datetime对象,最好先用pd.to_datetime()转一下,比如:

one_hour_ago = pd.to_datetime(one_hour_ago)
current_time = pd.to_datetime(current_time)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:49:25