DataFrame循环实现相邻行x列值相加报错TypeError的解决求助
问题解决与正确实现
错误原因分析
你的代码有两个核心问题导致TypeError: 'int' object is not subscriptable:
- 语法与逻辑错误:
r+1['x']完全不符合pandas的用法。r是iterrows()返回的当前行Series,r+1会把该行所有元素加1,得到的是数值型结果(而非下一行数据),再用['x']去下标访问自然会报错——整数不能被下标操作。另外r(['x'])也是语法错误,正确取行中x列值的写法是r['x']。 - 方法误用:
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
相关产品推荐
相关产品推荐

