You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:45:03