Python中pandas时间戳索引不规范时如何查询指定时间范围的数据
问题原因
between_time的作用是筛选每日固定时间段的数据,仅接收不带日期的时间类型参数(例如"08:15:00"、datetime.time(8,15)),不支持带完整日期的时间戳参数,所以传入带日期的字符串会抛出转换错误。
实现步骤
第一步:先将索引转为标准datetime类型
针对你提到的时间戳格式不规范的问题,先统一转换索引为pandas可识别的datetime格式:
import pandas as pd # 转换索引为datetime格式,errors='coerce'会将无法解析的时间转为空值(NaT) df.index = pd.to_datetime(df.index, errors='coerce') # 如有固定特殊时间格式,可加format参数提高解析效率,例如: # df.index = pd.to_datetime(df.index, format="%Y-%m-%d %H:%M:%S", errors='coerce') # 过滤无效时间行(可选) df = df[df.index.notna()]
第二步:筛选指定时间范围的两种常用方法
方法1:datetime索引直接切片(最简便)
pandas的DatetimeIndex原生支持时间字符串切片,默认左闭右闭,直接填写你需要的起止时间即可:
# 筛选2021-11-17 08:15:00 到 2021-11-19 08:00:00之间的所有数据 filtered_df = df["2021-11-17 08:15:00":"2021-11-19 08:00:00"]
方法2:布尔索引(灵活支持多条件组合)
如果需要和其他筛选条件搭配使用,布尔索引扩展性更强:
start_time = pd.to_datetime("2021-11-17 08:15:00") end_time = pd.to_datetime("2021-11-19 08:00:00") filtered_df = df[(df.index >= start_time) & (df.index <= end_time)]
扩展:按每日固定时间段筛选场景
如果你确实需要筛选所有日期里固定时段的数据(比如所有日期的8点~18点),才需要用到between_time:
# 筛选所有日期的08:15到20:00的数据 filtered_df = df.between_time("08:15:00", "20:00:00")
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

