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

Pandas resample重采样触发KeyError:'date'报错的解决方法

pandas DataFrame重采样触发KeyError: 'date'修复方案

报错根因

  • 重复执行set_index逻辑:首次执行set_index('date')后,date列会转为DataFrame索引,不再作为普通列存在。如果该代码块被重复触发(比如重复运行单元格、分支逻辑多次进入resample判断),后续再调用set_index('date')时找不到对应列,直接抛出KeyError。
  • 聚合列名和实际数据不匹配:从提供的样例数据看,拆分后的df1、df2行情列带有_x/_y后缀,不存在代码中写的open/high/low/close列,即使索引设置成功,聚合阶段也会触发列不存在的KeyError。
  • 隐性问题:未显式将date列转为时间类型,pandas可能无法识别时间索引导致重采样逻辑异常。

可直接运行的修复代码

import pandas as pd

if setting == 'resample':
    Freq_r = "60min"
    # 处理df1
    # 若date不在列中,先重置索引把date转回普通列
    if 'date' not in df1.columns:
        df1 = df1.reset_index()
    # 统一清理列名首尾空格,避免隐形空格导致的列匹配失败
    df1.columns = df1.columns.str.strip()
    # 转date列为标准datetime格式
    df1['date'] = pd.to_datetime(df1['date'])
    df1 = df1.set_index('date')
    # 按实际列名做聚合
    df1 = df1.resample(Freq_r).agg({
        'open_x': 'first',
        'high_x': 'max',
        'low_x': 'min',
        'close_x': 'last'
    })

    # 处理df2
    if 'date' not in df2.columns:
        df2 = df2.reset_index()
    df2.columns = df2.columns.str.strip()
    df2['date'] = pd.to_datetime(df2['date'])
    df2 = df2.set_index('date')
    df2 = df2.resample(Freq_r).agg({
        'open_y': 'first',
        'high_y': 'max',
        'low_y': 'min',
        'close_y': 'last'
    })

可选调整

如果你希望聚合后的列名保留通用的open/high/low/close命名,可以在set_index之前增加列重命名逻辑,以df1为例:

df1 = df1.rename(columns={
    'open_x': 'open',
    'high_x': 'high',
    'low_x': 'low',
    'close_x': 'close'
})

重命名后原agg字典的键名无需修改即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:39:17