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
相关产品推荐
相关产品推荐

