使用Pandas筛选CSV最近1小时数据未返回预期结果求助
问题原因
- 时区不匹配:你CSV里的
CreatedAt字段是带时区的偏移时间(样例中为UTC-8),但datetime.datetime.utcnow()生成的是无时区信息的原生时间对象,二者无法正确对齐比较 - 筛选逻辑错误:
sorted_df.loc[last_hour]是匹配索引等于last_hour的行,不是筛选处于last_hour到end_time区间的所有行
修正方案
首先统一时区,再用区间筛选逻辑替换单值匹配即可:
import pandas as pd import datetime # 读取时指定仅保留需要的两列,减少不必要的资源占用 df = pd.read_csv('file.csv', usecols=['CreatedAt', 'ID'], parse_dates=['CreatedAt'], index_col='CreatedAt') # 统一转为UTC时区避免时区偏差 df = df.tz_convert('UTC') sorted_df = df.sort_values(by=["CreatedAt"], ascending=False) # 给当前时间添加UTC时区标识,和数据时区保持一致 end_time = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc) last_hour = end_time - datetime.timedelta(hours = 1) # 用时间切片筛选1小时内的所有数据,pandas时间切片默认左闭右闭 filtered_dates = sorted_df.loc[last_hour: end_time] print(filtered_dates)
可选优化
如果不需要保留CreatedAt作为索引,也可以用布尔索引写法,逻辑更直观:
filtered_dates = sorted_df[(sorted_df.index >= last_hour) & (sorted_df.index <= end_time)]
内容的提问来源于stack exchange,提问作者4rb3l
相关产品推荐
相关产品推荐

