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

Pandas重采样后使用loc按季度索引出现异常问题咨询

这是预期行为,不是Pandas Bug

核心原因

  • 原始DataFrame的datetime索引使用loc["2014-Q1"]能正常匹配,是因为Pandas支持对连续datetime索引做「部分时间范围匹配」——它会自动将"2014-Q1"解析为2014年1-3月的时间区间,返回该区间内的所有行。
  • 但执行resample("QS").sum()后,生成的是离散的季度起始日Timestamp索引(比如2014-01-01对应2014年Q1,2014-04-01对应Q2,以此类推)。此时用loc["2014-Q1"]匹配时,Pandas会将该字符串解析为季度的最后一天(2014-03-31),这个日期不在离散的起始日索引中,因此抛出KeyError。
  • 而loc["2015-Q1"]会被解析为2015-03-31,如果你的重采样结果中没有2015年的索引(比如原始数据只到2014年),Pandas的loc会自动匹配小于等于该日期的最大索引,也就是2014年Q4的起始日2014-10-01,因此返回2014年的数据。

解决方法

  1. 直接匹配季度起始日字符串:
    用季度起始的具体日期或无横杠的季度格式匹配,比如:

    df.resample("QS").sum().loc["2014-01-01"]
    # 或者
    df.resample("QS").sum().loc["2014Q1"]  # Pandas会将"2014Q1"解析为2014-01-01
    
  2. 转换为PeriodIndex类型:
    将重采样后的索引转为季度周期类型,这样就能直接用"2014-Q1"匹配:

    resampled_df = df.resample("QS").sum().to_period("Q")
    resampled_df.loc["2014-Q1"]  # 正常返回预期结果
    

内容的提问来源于stack exchange,提问作者Someone1348

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:31:24