for循环计算数据集累计收益触发IndexingError的解决方法
报错原因
触发IndexingError: Too many indexers的核心原因是.iloc索引用法错误:df['Inflation_rate']和df['Earning']都是一维单列Series,对一维序列用.iloc取值时只需要传入1个行位置参数即可,你写的.iloc[i-1,i]传了2个参数,相当于要在二维结构里取坐标位置,一维结构自然会报索引器过多的错误。
逻辑修正说明
除了索引用法错误,原代码的行号匹配逻辑本身是成立的:循环变量i从1开始,第i年对应数据集里第i-1行的记录,不需要额外传入第二个索引参数。额外增加输入边界校验,可以避免输入年数超过数据集长度时触发索引越界问题。
修复后可运行代码
import pandas as pd # 下方示例df替换为你实际使用的数据集即可 df = pd.DataFrame({ 'Earning': [10000, 12000, 13000], 'Inflation_rate': [0.00, 0.12, 0.13] }) y = int(input("Please enter the number of years of contribution: ")) income_built = 0 divide = 75 if y > len(df): raise ValueError(f"输入年数不可超过数据集总长度,当前最多支持计算{len(df)}年的累计值") for i in range(1, y+1): # 修正iloc索引,仅传入行位置参数 year_inflation = df['Inflation_rate'].iloc[i-1] year_earning = df['Earning'].iloc[i-1] income_built = income_built * year_inflation + year_earning / divide print(int(income_built))
计算逻辑验证
- 输入年数为1时:计算式为
0 * 0.00 + 10000/75 ≈ 133.33,输出133,和定义的第1年计算规则一致 - 输入年数为2时:用上一年累计值133.33计算,式子为
133.33 * 0.12 + 12000/75 ≈ 16 + 160 = 176,输出176,和定义的第2年计算规则一致
内容的提问来源于stack exchange,提问作者ilhan ilkay
相关产品推荐
相关产品推荐

