我正在尝试迭代 panda 数据框中的特定列,以便比较行值是否连续下降,但我不断收到索引错误:“单个位置索引器超出范围”,和 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)
如果我能得到任何帮助,我将不胜感激。提前致谢。
最佳答案
你的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)
关于python-3.x - 将行值与接下来的 2 行进行比较时,无法解决 IndexError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55109748/