我正在根据仅具有4个唯一值的另一个功能将数据集中的一个功能中的值分组。该数据集中的总观测值为22438。
现在在迭代功能时出现此错误-
IndexError: index 22437 is out of bounds for axis 0 with size 22437
我已将数据框加载到df中。在这里,我必须根据键将df [:,1:2]的值附加到值(是列表)中。
这是我的代码:
od = {'2013J':[], '2014J':[], '2013B':[], '2014B':[]}
od = OrderedDict(od)
df = df.values
for up in od.keys():
i=0
for cp in df[:,1:2]:
i=i+1
if(cp==up):
od[up].append(df[i,2])
print(od)
代码有什么问题?怎么了?
答案 0 :(得分:0)
这是经典的off-by-one error。
您正在初始化i = 0
,然后在使用它之前立即将其递增1
,因此在每次迭代中,它将比您期望的大1。在最后一次迭代中,i
等于数组轴的大小,并且由于arrys在python中从0开始,因此将导致IndexError
。
您可以初始化i = -1
,将i = i + 1
(或i += 1
)放在循环块的底部,或者最好的解决方案是使用enumerate
函数:
for up in od.keys():
for i, cp in enumerate(df[:, 1:2]):
if cp == up:
od[up].append(df[i, 2])