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

DataFrame循环实现相邻行x列值相加报错TypeError的解决求助

问题解决与正确实现

错误原因分析

你的代码有两个核心问题导致TypeError: 'int' object is not subscriptable:

  1. 语法与逻辑错误:r+1['x']完全不符合pandas的用法。r是iterrows()返回的当前行Series,r+1会把该行所有元素加1,得到的是数值型结果(而非下一行数据),再用['x']去下标访问自然会报错——整数不能被下标操作。另外r(['x'])也是语法错误,正确取行中x列值的写法是r['x']。
  2. 方法误用:table0.add()是pandas的批量加法方法,并非用来逐行计算相邻值和的工具。

另外,iterrows()遍历大型DataFrame效率极低,不建议使用。

推荐实现方式(矢量化操作,高效)

用pandas的shift()函数直接实现矢量化计算,这是处理大型数据集的最优方案:

# 计算相邻两行x列的和,结果存到新列x_sum
table0['x_sum'] = table0['x'] + table0['x'].shift(-1)
# 去掉最后一行的NaN(因为最后一行没有下一行可加)
table0 = table0.dropna(subset=['x_sum'])

针对你的示例数据[562, 563, 568, 569, 566],运行后x_sum列会得到[1125, 1131, 1137, 1135],完全符合预期。

若非要用循环实现(不推荐大型数据集)

如果坚持用循环,需要通过索引定位下一行,而非iterrows()的行对象:

# 先创建新列存储结果
table0['x_sum'] = None
# 遍历到倒数第二行即可
for i in range(len(table0) - 1):
    # 用iloc按位置取行,避免索引不连续的问题
    current_x = table0.iloc[i]['x']
    next_x = table0.iloc[i+1]['x']
    table0.iloc[i, table0.columns.get_loc('x_sum')] = current_x + next_x
# 清理最后一行的空值
table0 = table0.dropna(subset=['x_sum'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:45:32