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

如何在Pandas DataFrame中对时间值执行逻辑测试

解决Pandas中时间类型比较的问题

嘿,这个问题我之前也碰到过,其实核心就是类型不匹配导致的报错——你手里的START_TIME是datetime.time对象,而你拿来比较的'16:00:00'是字符串,Python当然不知道怎么给它们做大小比较啦。下面给你几种靠谱的解决办法,你可以根据自己的需求选:

方法1:把比较基准转成datetime.time类型

既然你的列已经是datetime.time了,那把下午4点也转成同样的类型就行,两种方式都可以:

# 用标准库datetime的time类
from datetime import time
df['DAY COURSE INDICATOR'] = df['START_TIME'] < time(16, 0)

# 或者用Pandas的方式转换
df['DAY COURSE INDICATOR'] = df['START_TIME'] < pd.to_datetime('16:00:00').time()

这样两边都是datetime.time类型,就能正常比较了。

方法2:保留完整的datetime类型(更推荐)

其实你没必要把时间转成单独的dt.time,保留datetime类型会更灵活——虽然日期会默认是当前日期,但完全不影响时间部分的比较,而且后续如果要做时间相关的运算也方便:

# 不转成dt.time,直接保留datetime类型
df['START_TIME'] = pd.to_datetime(df['START_TIME'], format='%H%M')
# 直接和Timestamp对象比较
df['DAY COURSE INDICATOR'] = df['START_TIME'] < pd.Timestamp('16:00:00')

方法3:直接用原始整数比较(最简单)

如果你的需求只是判断早于/晚于下午4点,甚至可以不用转换时间类型——因为四位数字的时间(比如0845、1630)的整数大小和时间早晚是完全对应的,1600就是下午4点,直接比整数就行:

# 假设START_TIME是整数类型(如果是字符串的话先转int:df['START_TIME'] = df['START_TIME'].astype(int))
df['DAY COURSE INDICATOR'] = df['START_TIME'] < 1600

这种方法最省事儿,完全不用处理时间类型的转换问题。

总结一下:如果之后还要做更多时间相关操作,选方法2;如果就想保持当前的time类型,选方法1;如果只是单纯做早晚判断,方法3最快捷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:59:19