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

pandas中迭代时间序列数据触发Timestamp类型KeyError的解决办法

错误原因

你遇到的报错不是iterrows()修改了索引类型导致的,核心问题是pandas中直接用df[索引值]的语法默认是选取列,而非选取行,所以你传入时间戳索引会触发KeyError。要按行索引取值需要用.loc属性,将你的遍历代码修改为以下形式即可正常运行:

for d, r in h2.iterrows():
    print(d, h2.loc[d])

更适合pandas时间序列的处理方法

绝大多数场景下都不推荐用for循环遍历pandas数据,向量化操作的性能远高于循环遍历,可选方案包括:

  • 如果你需要逐行处理数据,优先用apply方法:
    例如需要对每一行的收盘价做计算,可以直接对行维度做apply操作:
    def process_row(row):
        # 自定义处理逻辑,示例:计算当日高低价差
        return row['High'] - row['Low']
    h2['price_range'] = h2.apply(process_row, axis=1)
    
  • 如果你只需要基于时间索引做筛选,直接用时间切片语法,性能远高于循环:
    例如筛选2021年10月15日到10月19日的所有数据:
    period_data = h2['2021-10-15':'2021-10-19']
    
  • 如果必须要遍历,除了iterrows()之外,也可以选择性能更好的itertuples()方法,返回命名元组,访问属性更方便、速度更快:
    for row in h2.itertuples():
        # 可以直接通过属性名访问索引和字段
        print(row.Index, row.Close, row.Volume)
    
  • 如果需要做时间序列特有的滚动计算、重采样等操作,直接用pandas内置的时间序列方法,不需要自行遍历:
    示例1:计算5日滚动平均收盘价
    h2['ma5'] = h2['Close'].rolling(5).mean()
    
    示例2:将日线数据重采样为周线数据
    weekly_data = h2.resample('W').agg({
        'Open': 'first',
        'High': 'max',
        'Low': 'min',
        'Close': 'last',
        'Volume': 'sum'
    })
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:18:00