我正在尝试遍历熊猫数据框中的特定列,以便比较行值是否连续下降,但是我不断收到索引错误:“单个位置索引器越界”,和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)
我将不胜感激。预先感谢。
答案 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)