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

时间序列数据按特定时段切片异常:筛选1-5点却返回全天数据

解决时间时段筛选失效的问题

你的问题出在time列的类型上——它现在是字符串类型,直接做字符串比较会遵循字典序规则,导致筛选逻辑完全错误。比如字符串'10:00:00'会被判定为小于'5:00:00',所以你的条件实际上把所有数据都留了下来。

下面是两种可靠的解决方法:

方法1:转换为时间类型后筛选

先把字符串格式的时间转换成datetime.time类型,再做区间比较:

import pandas as pd

# 将time列转换为时间类型(假设原格式是HH:MM:SS)
df['time'] = pd.to_datetime(df['time'], format='%H:%M:%S').dt.time

# 定义目标时段并筛选
start_time = pd.to_datetime('01:00:00').time()
end_time = pd.to_datetime('05:00:00').time()
time_period_df = df[(df['time'] >= start_time) & (df['time'] <= end_time)]

方法2:提取小时数筛选(更简洁)

如果只需要按小时区间筛选,可以直接提取小时数值来判断:

import pandas as pd

# 提取time列的小时数
df['hour'] = pd.to_datetime(df['time'], format='%H:%M:%S').dt.hour

# 筛选1点到5点的所有数据(包含两端)
time_period_df = df[(df['hour'] >= 1) & (df['hour'] <= 5)]

补充:如果time列包含完整日期

如果你的time列是带日期的完整时间字符串(比如'2010-01-01 02:30:00'),先提取纯时间部分再筛选:

import pandas as pd

# 提取时分秒部分
df['time_only'] = pd.to_datetime(df['time']).dt.time

# 执行筛选
start_time = pd.to_datetime('01:00:00').time()
end_time = pd.to_datetime('05:00:00').time()
time_period_df = df[(df['time_only'] >= start_time) & (df['time_only'] <= end_time)]

内容的提问来源于stack exchange,提问作者RichieGarafola

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:50:21