pandas DataFrame按日期索引筛选<=指定日期未获取历史数据问题
问题根因
问题核心来自两个原因:
- 你的Datetime索引是降序排列的,pandas的
loc切片默认遵循索引的物理存储顺序,而非时间逻辑的大小顺序。你给出的示例索引存储顺序是2021-07-30的记录在前,2021-07-06的记录在后,当你用None:"2021-07-30"做切片时,只会切到索引中前半段到匹配到2021-07-30的位置,排在后面的2021-07-06的记录自然不会被包含。 - 你直接使用无时区信息的
date对象转字符串和带时区的(tz-aware)Datetime索引匹配,容易出现时区解析歧义,导致筛选边界不符合预期。
正确操作步骤
1. 先对索引做升序排序
使用时间索引做范围筛选的前提是索引为升序排列:
df = df.sort_index()
2. 用带时区的时间对象做筛选边界
避免直接用字符串作为筛选边界,统一用带时区的Timestamp对象明确边界:
import pandas as pd import datetime current_date = datetime.date(2021, 7, 30) # 构造UTC时区的当日结束时间作为边界,可包含current_date当天的所有记录 end_boundary = pd.Timestamp(current_date, tz="UTC") + pd.Timedelta(days=1) filtered_df = df.loc[:end_boundary] # 直接求和可以简化为一行 total = df.loc[:end_boundary, "quantity"].sum()
内容的提问来源于stack exchange,提问作者iuuujkl
相关产品推荐
相关产品推荐

