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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:42:51