Pandas的.loc方法是否曾支持仅用整数索引访问?代码报错咨询
Pandas .loc 整数参数报错的原因分析
先看你提到的这段代码:
for i in range(1, len(pred_class) - 1): if pred_prob.loc[i, int(pred_class[i - 1])] > pred_prob.loc[i, int(pred_class[i + 1])]:
关于旧版本可行性
Pandas从引入.loc以来,核心规则就是按标签访问行列,从来没有允许过直接用位置索引作为.loc的参数。如果这段代码在某些环境下能运行,只是因为pred_prob的行索引刚好是默认的连续整数(比如0、1、2……),此时整数i既是位置索引也是行标签,属于巧合生效的情况——这不是旧版本的特殊特性,只要行索引被修改(比如筛选数据、重置索引后),这种写法立刻会报错。
代码本身的问题
这段代码属于未经过严谨测试的错误写法。它错误地把循环的位置索引i当成了行标签来使用,完全依赖行索引是默认整数序列的假设,一旦pred_prob的行索引不符合这个前提,就会触发KeyError(找不到对应标签)。
正确的写法应该用.iloc来按位置访问(因为循环变量i是位置索引),修改后如下:
for i in range(1, len(pred_class) - 1): if pred_prob.iloc[i, int(pred_class[i - 1])] > pred_prob.iloc[i, int(pred_class[i + 1])]:
内容的提问来源于stack exchange,提问作者ATYslh
相关产品推荐
相关产品推荐

