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

股票日收益率计算函数出现KeyError:1错误,求排查原因

问题分析与解决

错误原因

你遇到的KeyError: 1是因为你的DataFrame行索引不是连续的0起始整数(比如索引是日期字符串、非连续数字等)。你的循环里用j(从1开始的整数)直接作为行索引取值,但DataFrame中不存在该索引值,因此触发键错误。

修复方案

方案一:修正循环代码(按位置访问行)

改用iloc按行的物理位置访问数据,不受索引类型影响:

def daily_return(df):
    df_daily_return = df.copy()
    for col in df.columns[1:]:
        # 按行位置遍历,从第2行(位置1)开始
        for row_pos in range(1, len(df)):
            prev_val = df[col].iloc[row_pos - 1]
            curr_val = df[col].iloc[row_pos]
            df_daily_return[col].iloc[row_pos] = ((curr_val - prev_val) / prev_val) * 100
        # 第一行(位置0)设为0
        df_daily_return[col].iloc[0] = 0
    return df_daily_return

方案二:使用Pandas内置方法(更高效简洁)

Pandas自带pct_change()方法计算涨跌幅,比手动循环效率高且避免索引问题:

import pandas as pd

def daily_return(df):
    # 计算日涨跌幅比例并转为百分比
    daily_pct = df.iloc[:, 1:].pct_change() * 100
    # 第一行填充0(无前置数据)
    daily_pct.iloc[0] = 0
    # 合并原DataFrame的第一列(如日期列)
    return pd.concat([df.iloc[:, 0], daily_pct], axis=1)

调用代码保持不变:

stocks_daily_return = daily_return(stocks_df)
stocks_daily_return

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:48:16