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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:45:04