如何遍历带有双重索引的Pandas Series并解决迭代报错?
解决多级索引Pandas Series遍历报错问题
你遇到的错误原因很直接:直接遍历my_series时,迭代的是Series里的数值(比如14.0、65.0这类numpy.float64类型的值),而不是你需要的多级索引元组。所以for index,date in my_series会尝试把单个浮点数拆成两个变量,自然触发“'numpy.float64' object is not iterable”的报错。
下面给你几种正确的实现方式:
方式1:遍历多级索引对象
直接迭代my_series.index,每个元素是包含两个层级的元组:
# 直接用索引元组作为键 a_dict = {idx: my_series[idx] * 2 for idx in my_series.index} # 或者拆分出index和date单独处理 a_dict = {index: my_series[(index, date)] * 2 for index, date in my_series.index}
方式2:用items()方法直接获取索引和值
items()方法会返回每个元素的(索引元组,对应值)对,更直观:
# 用索引元组作为键 a_dict = {idx: val * 2 for idx, val in my_series.items()} # 拆分索引层级 a_dict = {index: val * 2 for (index, date), val in my_series.items()}
额外需求:按第一个索引层级分组处理
如果你的目标是把第一个层级的index作为键,对应该分组下所有处理后的值,可以用groupby:
# 生成{12345: [28.0, 130.0, 162.0], 23456: [42.0, 102.0, 110.0]}这样的字典 a_dict = {idx: (group * 2).tolist() for idx, group in my_series.groupby(level=0)}
内容的提问来源于stack exchange,提问作者backer
相关产品推荐
相关产品推荐

