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

提取符合日期时间范围的行:DataFrame日期筛选报错求助

问题解决:筛选DataFrame中日期范围内的行

报错原因分析

  • 使用and报错:and是Python原生逻辑运算符,仅能处理单个布尔值。而df_new['Start'] <= currentdate返回的是布尔Series(一组布尔值),Pandas无法判断整个Series的真值,因此抛出ValueError: The truth value of a Series is ambiguous...。
  • 使用&报错:一是运算符优先级问题,<=的优先级低于&,不加括号会先执行df_new['Start'] & currentdate,但datetime.date和datetime.datetime类型不支持按位与操作,触发TypeError;二是日期类型不匹配,Start/End为date类型,currentdate为datetime类型,直接比较易引发意外问题。

正确解决步骤

步骤1:统一日期类型

要么将currentdate转为datetime.date类型,要么把DataFrame中的Start和End列转为datetime.datetime类型,确保两边类型一致。

步骤2:用带括号的按位与运算符&

由于&的优先级高于比较运算符,必须给每个比较条件单独加括号,再用&连接。

示例代码

方式一:转换currentdate为date类型

# 将datetime类型的currentdate转为date类型
currentdate_date = currentdate.date()
# 筛选符合条件的行
df_current = df_new[(df_new['Start'] <= currentdate_date) & (currentdate_date <= df_new['End'])]

方式二:转换DataFrame列为datetime类型

import pandas as pd

# 将Start和End列转为datetime类型
df_new['Start'] = pd.to_datetime(df_new['Start'])
df_new['End'] = pd.to_datetime(df_new['End'])
# 直接用datetime类型的currentdate筛选
df_current = df_new[(df_new['Start'] <= currentdate) & (currentdate <= df_new['End'])]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:06:10