如何在pandas.date_range生成的时段列表中排除指定时间区间?
实现时间序列排除指定区间的简便方案
pandas 没有内置直接叫 .exclude() 的方法,但可以通过自带的时间筛选方法一行完成过滤,无需手动拆分多段时间再合并,代码可维护性更高,适配多排除区间的场景也更灵活。
实现代码
你可以直接改造原有的create_range_string方法,增加排除时段参数:
import pandas as pd def create_range_string(self, start, end, freq='30T', exclude_start=None, exclude_end=None): # 先生成全量时间序列 full_range = pd.date_range(start=start, end=end, freq=freq) # 配置了排除区间则执行过滤 if exclude_start and exclude_end: # ~ 代表逻辑取反,即排除落在[exclude_start, exclude_end)区间内的时间 full_range = full_range[~full_range.indexer_between_time( exclude_start, exclude_end, include_start=True, # 包含排除区间的开始时间,比如12:00整会被排除 include_end=False # 不包含排除区间的结束时间,比如13:00整会保留 )] return full_range.strftime('%H:%M')
调用示例
直接传入要排除的时段即可得到结果:
# 生成09:00到15:00、间隔30分钟、排除12:00-13:00的时间数组 result = self.create_range_string('09:00', '15:00', exclude_start='12:00', exclude_end='13:00')
方案优势
- 逻辑更简洁,无需手动拆分多段时间再合并
- 适配多排除区间的场景更方便:如果需要新增其他排除时段,只要叠加过滤条件即可,不用多次拆分合并
- 可通过
include_start、include_end参数灵活调整区间的开闭规则,适配不同业务需求
内容的提问来源于stack exchange,提问作者Danny O
相关产品推荐
相关产品推荐

