Python for循环保存最后两次迭代数据报KeyError:65问题求解
错误原因
KeyError: 65 表示你尝试访问的整数索引65不存在于dispo_ville_n的索引集合中,问题根源是dispo_ville_n.loc[capt-1,"DevEUI"]的索引访问逻辑存在漏洞:
- 如果你遍历的
dispo_ville_n索引不是连续的整数序列,比如索引实际为[66,67,68],第一次循环取到capt=66时,capt-1=65不在索引范围内,就会直接抛出该错误 - 即使索引是连续的,第一次循环的
capt是索引最小值时,capt-1必然是不存在的非法索引 - 额外注意:你原代码中访问
capt_fonctionnels的多键没有包裹为元组,可能被解析为两个独立参数,也会引发取值异常
修复方案
你需要保存最后两次迭代的信息,更稳妥的实现方式是用临时变量存储上一轮迭代的DevEUI值,完全规避索引访问的兼容问题:
# 初始化变量存储上一轮的DevEUI last_dev_eui = None for capt in dispo_ville_n.index.values.astype(int): # 此处省略其余脚本逻辑 current_dev_eui = dispo_ville_n.loc[capt, "DevEUI"] # 跳过第一次循环,只有存在上一轮值时再执行统计 if last_dev_eui is not None: nmbr_capt = capt_fonctionnels[(current_dev_eui, last_dev_eui)].value_counts() # 更新上一轮值供下一次循环使用 last_dev_eui = current_dev_eui
如果你确实需要保留索引减1的访问逻辑,先校验索引合法性再执行操作:
for capt in dispo_ville_n.index.values.astype(int): # 此处省略其余脚本逻辑 if (capt - 1) in dispo_ville_n.index: nmbr_capt = capt_fonctionnels[(dispo_ville_n.loc[capt,"DevEUI"], dispo_ville_n.loc[capt-1,"DevEUI"])].value_counts()
内容的提问来源于stack exchange,提问作者Asmae
相关产品推荐
相关产品推荐

