如何在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
相关产品推荐
相关产品推荐

