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

pandas遍历DataFrame报错TypeError:string indices must be integers原因排查

错误定位与修复方案

1. 错误触发根因

你遇到的TypeError: string indices must be integers报错来自for row in df这行代码:

  • 直接遍历DataFrame对象时,迭代返回的是列名的字符串值(依次是'Actual'、'Predicted'、'Prior'三个字符串),不是你预期的行数据
  • 后续执行row['Actual']时相当于用字符串索引访问字符串,自然触发类型错误

2. 原有代码其他问题

除了遍历错误外,逻辑部分还有两处错误:

  • 逻辑运算符使用错误:Python中判断布尔逻辑的与/或应该用and/or,&/|是位运算符,优先级比比较运算符高,会导致计算顺序完全不符合预期
  • 判断条件写法错误:你需要的「Actual和Predicted同时大于Prior 或 同时小于Prior」的条件,原有写法逻辑完全不匹配,row['Actual'] & row['Predicted'] > row['Prior']会先做位与运算再比较,完全不符合需求逻辑

3. 正确实现代码

方案1:修改遍历逻辑(适合小数据集)

import pandas as pd
ActualClose = [898,1415,226,6006 ]  
Predicted = [905,1426,229,6021]
Prior = [891,1351,228,5993]

df = pd.DataFrame(list(zip(ActualClose, Predicted, Prior)), columns =['Actual', 'Predicted', "Prior"])
count = 0
# 用iterrows迭代行数据,index是行号,row是行的Series对象
for index, row in df.iterrows():
    # 按需求写正确的判断条件
    if (row['Actual'] > row['Prior'] and row['Predicted'] > row['Prior']) or (row['Actual'] < row['Prior'] and row['Predicted'] < row['Prior']):
        count = count + 1
print(count)

方案2:pandas向量化操作(更高效,推荐)

不需要循环,直接用向量运算统计符合条件的行数,性能远高于遍历:

cond1 = (df['Actual'] > df['Prior']) & (df['Predicted'] > df['Prior'])
cond2 = (df['Actual'] < df['Prior']) & (df['Predicted'] < df['Prior'])
count = (cond1 | cond2).sum()
print(count)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:18:02