遍历pandas Series填充label列表触发KeyError,寻求解决方案
解决pandas Series遍历的KeyError问题
嘿,你遇到的KeyError: (0, 218)问题根源很明确:当你用ageNew.items()遍历Series时,每次循环拿到的i是一个**(索引, 值)的元组**(比如示例里的(0, 218)),这时候你再用ageNew[i]去取值,自然找不到对应的索引,就触发了KeyError。
下面给你几种修复方案,从基础到高效都有:
方案1:正确拆解items()的返回值
直接把元组拆成索引和对应的值,不用再通过索引去取值:
label = [] for idx, age in ageNew.items(): val = 0 if age <= 100 else 1 label.append(val)
方案2:直接遍历Series的值
如果你不需要用到索引,直接遍历Series本身就会拿到每个元素的值,代码更简洁:
label = [] for age in ageNew: val = 0 if age <= 100 else 1 label.append(val)
方案3:用pandas矢量化操作(推荐)
pandas最擅长的就是矢量化运算,比循环高效太多,尤其是数据量较大的时候:
# 一步到位生成label列表 label = (ageNew > 100).astype(int).tolist()
原理是:
ageNew > 100生成布尔Series,大于100为True,否则为Falseastype(int)把True转成1,False转成0tolist()把Series转成普通列表,和循环结果完全一致
内容的提问来源于stack exchange,提问作者cool_beans
相关产品推荐
相关产品推荐

