python-3.x - 将行值与接下来的 2 行进行比较时,无法解决 IndexError

标签 python-3.x

我正在尝试迭代 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/

相关文章:

python-3.x - Python N-Queen解决方案说明

python - 从包含在 Excel 单元格中的 CSV 导入的文本

python - 可以在 Click 6 中执行多个嵌套命令

python - 捕获停止执行我的 Python 脚本的错误

python - 如何使用枚举键将用户输入添加到字典中?

python-3.x - 无法在 .rst toctree Sphinx 中显示多个 .md 文件

python - 使用python解析或读取cpp文件并通过忽略cpp文件注释添加数据

python - 扩展空列表使第一个元素为空

python - 交换名字和姓氏位置

python-3.x - Python subprocess.Popen 结果存储在一个变量中