遍历数据集中的某个功能时,我得到了IndexError:索引22437超出了轴0的大小22437的范围

时间:2018-07-26 08:37:50

标签: python dataframe

我正在根据仅具有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)

代码有什么问题?怎么了?

1 个答案:

答案 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])