时间序列数据按特定时段切片异常:筛选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
相关产品推荐
相关产品推荐

