pandas按日期筛选重叠行时报Timestamp与DatetimeArray运算类型错误求助
问题原因与解决方法
报错原因
- 运算符优先级错误:Python中位运算符
&的优先级高于比较运算符>、<,你写的代码会优先计算rd_target[0] & a_pd["start"],而rd_target[0]是Timestamp类型,a_pd["start"]是DatetimeArray类型,二者不支持直接做与运算,因此抛出类型错误。 - 目标区间取值错误:你调用
random_dates(start, end, 1)生成的rd_target是长度为1的时间序列,不存在索引为1的元素,无法作为目标区间的结束值使用。
解决代码
首先明确目标日期区间的起止值,再给每个比较条件加上括号保证运算顺序,正确筛选代码如下:
# 定义目标区间起止 target_start = pd.to_datetime('2016-01-01') target_end = pd.to_datetime('2016-01-02') # 按重叠规则筛选,每个条件用括号包裹,&连接 filtered_pd = a_pd[(a_pd["end"] > target_start) & (a_pd["start"] < target_end)]
逻辑说明
时间区间重叠的通用判断规则为:区间A的结束时间晚于区间B的开始时间,且区间A的开始时间早于区间B的结束时间,该规则可覆盖所有重叠场景,无遗漏。
内容的提问来源于stack exchange,提问作者Fabrizio
相关产品推荐
相关产品推荐

