如何正确比较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
相关产品推荐
相关产品推荐

