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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:24:10