首页 > 解决方案 > Python - 在 ML 代码中。出现错误:IndexError:列表索引超出范围

问题描述

我正在阅读一些 ML python 代码,只是试图了解它是做什么的以及它是如何工作的。我注意到一个 youtube 视频,它把我带到了这个代码random-forests-tutorials。该代码实际上使用硬编码的 Array/List。但是如果我使用文件作为输入,那么它会抛出

IndexError: list index out of range in the print_tree function

有人可以帮我解决这个问题吗?除了将它指向文件作为输入而不是硬编码的数组之外,我还没有更改程序中的任何其他内容。

我创建了这个函数来从 HEADER 和 TRAINING 文件中读取 CSV 数据。但是要读取 TESTING 数据文件,我有类似的功能,但没有读取 row[5],因为它不存在。测试数据文件的列数为 1 短。

def getBackData(filename)
  with open(filename, newline='') as csvfile:
    rawReader = csv.reader(csvfile, delimiter=',', quotechar='"')
    if "_training" in filename:
        parsed = ((row[0],
                   int(row[1]),
                   int(row[2]),
                   int(row[3]),
                   row[4],
                   row[5])
                  for row in rawReader)
    else:
        parsed = rawReader

    theData = list(parsed)
return theData

所以在代码中我使用变量作为

training_data = fs.getBackData(fileToUse + "_training.dat")
header = fs.getBackData(fileToUse + "_header.dat")
testing_data =fs.getBackData(fileToUse + "_testing.dat")

标题的示例数据是

  header = ["CYCLE", "PASSES", "FAILURES", "IGNORED", "STATUS", "ACCEPTANCE"]

训练数据的样本是

"cycle1",10,5,1,"fail","discard"
"cycle2",7,9,0,"fail","discard"
"cycle3",14,2,0,"pass","accept"

测试数据的样本是

"cycle71",11,4,1,"failed"
"cycle72",16,0,0,"passed"

标签: python-3.xlist

解决方案


我不敢相信自己。我想知道为什么在 Python 中其他所有事情都如此简单时,使用 CSV 文件却如此困难。我的错,我是新手。所以我终于弄清楚是什么导致列表超出范围。

  1. 函数 getBackData 仅用于训练数据和测试数据。
  2. 标题和测试数据需要单独的函数。因为 Header 将具有相同数量的列,所以数据类型仍然是 String。

实际上,我也在为 Header 使用函数 getBackData。它在二维列表中返回 CSV(包含标题)。通常这就是它的作用。这导致了这个问题。

标题应该被读取为 header[index],而不是代码将其识别为 header[row][col]。这就是我错过的。我假设 Python 足够智能,可以理解 CSV 中是否只有 1 行,它应该返回一个一维数组。

值得一个笑脸:-)


推荐阅读