股票日收益率计算函数出现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
相关产品推荐
相关产品推荐

