新增内容:IndexError:列表索引超出范围

时间:2019-05-04 05:32:00

标签: python python-3.x

我想读取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

2 个答案:

答案 0 :(得分:1)

索引是从零开始的……“第四”项是line[3]。更改您的循环以使用:

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

(在这种情况下,第四项也是最后项...因此,替代项是line[-1]

答案 1 :(得分:0)

正如另一个答案所说,您需要一个小的解决方法:

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文章可能会对您有所帮助。