2016-11-13 11 views
0

I'm в настоящее время делает проект для университета, в котором мне нужно оценить набор данных из Kaggle: enter image description herePython 3 Сравнение строк из Kaggle Dataset CSV-данные: ошибка «индекс строки из диапазона питона»

Мои проблема довольно проста, но я просто не мог понять это, исследуя: Как мне сопоставить, если зарплата выше или ниже 50K в Python? Проблема заключается в строке «if-clause». Он всегда показывает мне эту ошибку: IndexError: индекс строки вне диапазона

Спасибо, что помогли мне!

import csv 

with open('C:/Users/jkhjkh/Google Drive/Big data/adult.csv') as csvfile: 
    readCSV = csv.reader(csvfile, delimiter=',') 

y = 0 
z = 0 

ages = [] 
maritalstatuss = [] 
races = [] 
sexes = [] 
hoursperweeks = [] 
incomes = [] 

for row in readCSV:   # 4th row extracts 
    age = row[0]   # '54' 
    maritalstatus = row[5] # 'Divorced' 
    race = row[8]   # 'White' 
    sex = row[9]   # 'Female' 
    hoursperweek = row[12] # '40' 
    income = row[14]  # '<=50K' 

    ages.append(age) 
    maritalstatuss.append(maritalstatus) 
    races.append(race) 
    sexes.append(sex) 
    hoursperweeks.append(hoursperweek) 
    incomes.append(hoursperweek) 

print(len(ages)) 

for x in range(1,len(ages)): 
    if ages[x] > '40' and ages[x] < '66' and income[x] < '50K': 
     y = y + 1 

print(y) 

ответ

0

Я считаю, что вы ошибаетесь, проводя сравнение строк, хотя вы намерены сравнить возраст (число) и доход (число).

if (ages[x] > 40 and ages[x] < 66) and income[x] < 50000: 

убедитесь, что эти (возраст и доход) списки python являются числовыми. Используйте метод преобразования. Дайте мне знать, если это сработает.

+0

Большое спасибо за ваш ответ. Я выяснил, проблема по совпадению. Проблема заключалась в том, что переменная должна была быть названа «доходы [x]» вместо «доход [x]». Затем он работает :) – Andy89

+0

OK. Пропустил это. Однако сравнение строк корректно (если цикл) после изменения его на «доходы [x]»? – w1n5rx

0

Список в Python равен 0-origin, поэтому значение индекса for-loop x превышает диапазон индексов списка возрастов, когда он достигает len (age). Эта ошибка известна как off-by-one error.

import csv 

with open('C:/Users/jkhjkh/Google Drive/Big data/adult.csv') as csvfile: 
    readCSV = csv.reader(csvfile, delimiter=',') 

y = 0 
z = 0 

ages = [] 
maritalstatuss = [] 
races = [] 
sexes = [] 
hoursperweeks = [] 
incomes = [] 

for row in readCSV: 
    age = int(row[0]) 
    maritalstatus = int(row[5]) 
    race = row[8] 
    sex = row[9] 
    hoursperweek = (row[12]) 
    income = row[14] 

    ages.append(age) 
    maritalstatuss.append(maritalstatus) 
    races.append(race) 
    sexes.append(sex) 
    hoursperweeks.append(hoursperweek) 
    incomes.append(hoursperweek) 

print(len(ages)) 

for x in range(1, len(ages) - 1): 
    if ages[x] > 40 and ages[x] < 66 and incomes[x] == '<=50K': 
     y = y + 1 

print(y) 

Кроме регулировки диапазона индекса цикла, значения возраста, MaritalStatus и hoursperweeks будет читаться как INT в настоящее время. Результат численного сравнения как str отличается как int. (например, '3' < '10' - False, но 3 < 10 - True.)

 Смежные вопросы

  • Нет связанных вопросов^_^