使用for循环配对数据时触发KeyError:403755错误,求排查解决
问题排查:KeyError: 403755 当使用for循环进行数据集两两配对时
我正在用for循环将数据集中的每个值两两配对,但运行时抛出了KeyError,报错信息如下:
Traceback (most recent call last): File "C:\Users\nourf\AppData\Roaming\Python\Python39\site-packages\pandas\core\indexes\range.py", line 385, in get_loc return self._range.index(new_key) ValueError: 403755 is not in range The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\Users\nourf\PycharmProjects\work\1.0.py", line 75, in <module> if str(newdf.loc[fval, "mac"]) == str(newdf.loc[sval, "mac"]): File "C:\Users\nourf\AppData\Roaming\Python\Python39\site-packages\pandas\core\indexing.py", line 960, in __getitem__ return self.obj._get_value(*key, takeable=self._takeable) File "C:\Users\nourf\AppData\Roaming\Python\Python39\site-packages\pandas\core\frame.py", line 3622, in _get_value row = self.index.get_loc(index) File "C:\Users\nourf\AppData\Roaming\Python\Python39\site-packages\pandas\core\indexes\range.py", line 387, in get_loc raise KeyError(key) from err KeyError: 403755
问题原因分析
- 核心问题:你用到的索引值
403755不在newdf的索引范围内。Pandas的RangeIndex是连续递增的序列(通常从0开始),访问不存在的索引就会触发这个错误。 - 常见诱因:
- 循环逻辑错误:生成的索引值超过了数据集实际行数。比如数据集只有403755行,索引最大是403754,但循环却生成了403755。
- 数据集索引被修改:之前的操作(比如删除行)导致索引不连续,但循环仍按原连续范围生成索引。
- 混淆列值与索引:
fval/sval是数据列的数值,而非DataFrame的有效索引值。
解决建议
- 先确认索引范围:执行
print(newdf.index)查看索引的起始、结束值以及是否连续。 - 修正两两配对逻辑:用
itertools.combinations直接基于合法索引生成配对,避免手动生成索引出错:import itertools # 生成所有行的两两索引组合 for fval, sval in itertools.combinations(newdf.index, 2): if str(newdf.loc[fval, "mac"]) == str(newdf.loc[sval, "mac"]): # 你的业务逻辑代码 - 重置索引(若索引不连续):
重置后索引会变成从0开始的连续整数,再循环就不会出现超出范围的问题。newdf = newdf.reset_index(drop=True) - 检查
fval/sval来源:确保它们是从newdf.index中获取的,而非其他数据列的数值。
内容的提问来源于stack exchange,提问作者Nernugget
相关产品推荐
相关产品推荐

