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

如何正确比较Pandas中datetime.time类型的数据?

解决DataFrame中datetime.time类型列的比较问题

datetime.time是时间点类型,和整数、timedelta(时长类型)属于不同数据类型,自然没法直接比较。给你两种实用的解决思路:

方法1:将time对象转为总秒数,和目标时长的秒数比较

把datetime.time转换成对应的总秒数(比如0时21分4秒就是21*60+4=1264秒),再和目标时长的秒数(比如2小时=7200秒)做数值比较:

import pandas as pd
from datetime import time

# 示例DataFrame
df = pd.DataFrame({'tat': [time(0,21,4), time(2,10,0), time(1,59,59)]})

# 判断是否小于2小时(7200秒)
df['less_than_2h'] = df['tat'].apply(lambda x: x.hour*3600 + x.minute*60 + x.second) < 7200
# 或者用更简洁的写法:利用timedelta计算总秒数
# df['less_than_2h'] = df['tat'].apply(lambda x: pd.Timedelta(hours=x.hour, minutes=x.minute, seconds=x.second).total_seconds()) < 7200

方法2:将目标时长转为datetime.time对象,直接比较

如果你的判断逻辑是“是否早于N点0分0秒”(比如小于2小时等价于时间点早于2:00:00),可以直接把目标时长转换成datetime.time对象,和原列的time值直接比较:

# 2小时对应的time对象是time(2,0,0)
df['less_than_2h'] = df['tat'] < time(2, 0, 0)

这个方法更直观,因为datetime.time类型本身支持直接比较大小(按时分秒的顺序逐一对比)。

验证结果

运行上面的代码后,df的less_than_2h列会返回:

  • 第一行time(0,21,4):True
  • 第二行time(2,10,0):False
  • 第三行time(1,59,59):True

完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:50:25