如何筛选DataFrame中时间为整点(HH:00:00)的数据行?
整点数据筛选解决方案
针对你的需求,既然time列已经是datetime64[ns]类型,无需通过字符串切片判断,直接利用pandas的datetime属性就能精准筛选整点数据,以下是几种可行方案:
方案1:直接判断分钟与秒是否为0
通过dt属性提取时间的分钟和秒,筛选两者均为0的行,不受数据缺失影响,适配所有时间粒度:
df_hourly = df[(df['time'].dt.minute == 0) & (df['time'].dt.second == 0)]
方案2:按小时聚合(按需选择)
如果需要每个整点仅保留一行数据(比如从5分钟/分钟粒度数据中提取整点首行或做聚合计算),可以用resample方法:
# 提取每个整点的第一行数据 df_hourly_first = df.resample('H', on='time').first() # 若需要聚合计算,比如取小时均值 df_hourly_mean = df.resample('H', on='time').mean()
注:resample会自动将结果的索引设为整点,如需还原原DataFrame结构,可追加reset_index()。
关于之前方法的问题说明
- 索引步长法失效:数据缺失导致索引与时间不再严格对应,无法依赖固定间隔的索引筛选。
- 字符串切片报错:
df.time_column[-5:]是对Series直接做字符串切片操作,但Series的RangeIndex不支持该索引方式,即使改用dt.strftime转换为字符串判断,效率也远低于直接操作datetime属性。
内容的提问来源于stack exchange,提问作者csingleton19
相关产品推荐
相关产品推荐

