使用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]类型转换成布尔值来完成这个运算。
正确的写法有两种:
- 给每个比较条件单独加括号,确保先完成比较,再做逻辑与:
my_df = my_df[(my_df['Date'] >= one_hour_ago) & (my_df['Date'] <= current_time)]
(注意:这里两个条件都要套括号,缺一不可!)
- 用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
相关产品推荐
相关产品推荐

