RangeIndex位置索引报错:NumPy一行代码填充Pandas缺失值
问题分析与解决方案
错误原因
你的代码报错源于两个核心问题:
test.index%12返回的是Int64Index类型对象,而iloc要求的索引器是整数列表/数组,无法直接传入索引对象;- 原逻辑中
test.iloc[test.index%12::12].mean()是取整个切片的全局均值,而非每个index%12分组的均值,不符合你“用每12个前置值的均值填充”的需求。
修正方案(两种实现)
方案一:分组计算均值后映射填充
先按index%12分组计算每组的均值,再将缺失值映射到对应组的均值完成填充:
import pandas as pd import numpy as np test = pd.Series([10,5,3,4,6,12,6,7,2,4,7,12,6,7,2,4,7,12,3,4,6,12,6,7]+[pd.NA]*12) # 按位置模12分组,计算每组的均值 group_means = test.groupby(test.index % 12).mean() # 填充缺失值:将每个缺失值的位置模12结果映射为对应组的均值 test_filled = test.fillna(test.index % 12.map(group_means))
方案二:用transform简化实现
利用Pandas的transform方法,直接对每组内的缺失值填充该组的均值,代码更简洁:
import pandas as pd import numpy as np test = pd.Series([10,5,3,4,6,12,6,7,2,4,7,12,6,7,2,4,7,12,3,4,6,12,6,7]+[pd.NA]*12) test_filled = test.groupby(test.index % 12).transform(lambda x: x.fillna(x.mean()))
效果验证
以组0为例,前置值为[10,6,3],均值为(10+6+3)/3≈6.333;组1前置值为[5,7,4],均值为(5+7+4)/3≈5.333,填充后的最后12个缺失值会依次对应0-11组的均值,完全符合需求。
内容的提问来源于stack exchange,提问作者Gramatik
相关产品推荐
相关产品推荐

