【问题标题】:new: IndexError: list index out of range [duplicate]新:IndexError:列表索引超出范围[重复]
【发布时间】:2019-09-22 14:07:05
【问题描述】:

我想读取 csv 文件信息,以便算法能够猜测个人的性别。 该程序通过身高、体重和性别鞋类数字来猜测人们。

但是我遇到了这个错误,我无法修复它:

y.append(line[4])

IndexError: 列表索引超出范围

height,weight,n_shoes,sexuality
190,88,44,male
167,66,36,female
182,80,42,male
177,78,43,male
164,59,35,female
183,79,40,male
158,57,36,female
155,52,34,female
193,89,45,male
163,54,35,female

代码:

import csv
from sklearn import tree

x = []
y = []

with open('people.csv' , 'r') as csvfile:
    data = csv.reader(csvfile)    
    for line in data:
        x.append(line[1:4])
        y.append(line[4])


clf = tree.DecisionTreeClassifier()
clf = clf.fit(x , y)

new_data = [[190,89,43] , [160,56,39]]
answer = clf.predict(new_data)

print(answer[0])
print(answer[1])

我想读取csv文件信息,让算法有能力猜测个人的性别。

new_data 变量中读取新数据并猜测此人的性格。

例如:

[190 , 89 , 42] ==> male 
[162 , 59 , 37] ==> female

【问题讨论】:

  • 基于零的索引

标签: python python-3.x


【解决方案1】:

索引是从零开始的......“第四”项是line[3]。改变你的循环使用:

for line in data:
    x.append(line[:3])
    y.append(line[3])

(在这种情况下,第四项也是最后一个项......所以替代方案是line[-1]

【讨论】:

    【解决方案2】:

    正如另一个答案所说,您需要一个小修复:

    import csv
    
    from sklearn import tree
    
    x = []
    y = []
    
    with open('people.csv' , 'r') as csvfile:
        data = csv.reader(csvfile)
        for line in data:
            x.append(line[0:3])
            y.append(line[3])
    
    
    clf = tree.DecisionTreeClassifier()
    clf = clf.fit(x , y)
    
    new_data = [[190,89,43] , [160,56,39]]
    answer = clf.predict(new_data)
    
    print(answer[0])
    print(answer[1])
    

    假设您要选择前三个元素,我将y.append(line[4]) 更改为y.append(line[3])x.append(line[0:3])

    为什么会这样:

    列表索引从 0 开始,而您假设它会从 1 开始。

    This 文章可能对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-11
      • 2012-06-23
      • 2017-11-12
      • 2017-11-03
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      相关资源
      最近更新 更多