将行值与接下来的2行进行比较时无法解决IndexError

时间:2019-03-11 20:18:43

标签: python-3.x

我正在尝试遍历熊猫数据框中的特定列,以便比较行值是否连续下降,但是我不断收到索引错误:“单个位置索引器越界”,和TypeError:&分别不支持的操作数类型:“ numpy.float64”和“ numpy.float64”。以下是我的实际数据以及给出错误的代码的摘录。

提供示例数据:

gdp = pd.DataFrame({"quater":['q1','q2','q3','q4','q1','q2','q3'], 
                'gdp_current':[243.1,246.3,250.1,260.3,266.2,272.9,279.5],
                'gdp_chained':[1934.5,1932.3,1930.3,1960.7,1989.5,2021.9,2033.2], 
                'identifier':['1947q1','1947q2','1947q3','1947q4','1948q1','1948q2','1948q3']
                })



for i in range(0,len(gdp)):
    if gdp.iloc[i, 1] > gdp.iloc[i+1, 1]:
        when = gdp.iloc[i, 2]
print(when)



for i in range(0,len(gdp)):
    if gdp.iloc[i, 1] > gdp.iloc[i+1, 1] & gdp.iloc[i, 1] > gdp.iloc[i+2, 1]:
        when = gdp.iloc[i, 2]
print(when)

我将不胜感激。预先感谢。

1 个答案:

答案 0 :(得分:4)

您的for循环遍历整个DataFrame:

for i in range(0,len(gdp)):

,您指的是i+1。当i指向最后一个元素时,这将不起作用。

您应该使用range(1,len(gdp))并比较项目i-1和项目i, 或使用range(0,len(gdp)-1)并比较项目i和项目i+1

这是一个非常常见的错误,称为off-by-one error

顺便说一句,当您的范围从0开始时,您无需指定0。例如,range(0,5)range(5)