python-3.x - 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 中其他所有事情都如此简单时,使用 CSV 文件却如此困难。我的错,我是新手。所以我终于弄清楚是什么导致列表超出范围。
- 函数 getBackData 仅用于训练数据和测试数据。
- 标题和测试数据需要单独的函数。因为 Header 将具有相同数量的列,所以数据类型仍然是 String。
实际上,我也在为 Header 使用函数 getBackData。它在二维列表中返回 CSV(包含标题)。通常这就是它的作用。这导致了这个问题。
标题应该被读取为 header[index],而不是代码将其识别为 header[row][col]。这就是我错过的。我假设 Python 足够智能,可以理解 CSV 中是否只有 1 行,它应该返回一个一维数组。
值得一个笑脸:-)
推荐阅读
- laravel - 使用 laravel api 搜索 vue.js
- c# - 来自 ItemsControl 的 Panel.ZIndex 在 WPF .NET Core 应用程序中的 Canvas 上不起作用
- mysql - “Docker for Windows”环境中节点红色中的连接错误
- c++ - 如何为 OpenBSD Make 生成 compile_commands.json 文件
- python - AttributeError:模块“pandas”没有属性“get_dummes”
- css - 将卡片布局渲染为 2x2 / 3x3
- xquery - 如何跳过特定元素?
- polygon - 为什么要栅格化多边形?
- node.js - docker-compose 总是使用 nodejs 执行
- kubernetes - 无法将现有的 K8s 集群注册到 Rancher