Попытка вставить содержимое файла CSV в разные списки - PullRequest
1 голос
/ 02 мая 2020

Я пытаюсь вставить содержимое файла CSV в несколько списков. Для этого я раздели струны из CSV. К сожалению, я всегда получаю ошибку «индекс списка вне диапазона», если я пытаюсь вставить содержимое строки с индексом 1 или выше. Для индекса 0 это как-то работает. Я проверил вывод функции print (akt). На этом основании это должно работать. Я использую набор данных радужной оболочки. Редактировать: Может быть, это из-за последней строки набора данных, не так ли? В конце есть пустой список, сначала я его не видел.

import csv

x1 = []
x2 = []
colors = []

with open("iris.csv" ,"r") as csvfile:
    for line in csvfile:
        akt = line.strip().split(',')
        x1.append(akt[0])
        x2.append(akt[1])
        colors.append(akt[4])
        #print(akt)
    csvfile.close()
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-15-247b0992263a> in <module>
      9         akt = line.strip().split(',')
     10         x1.append(akt[0])
---> 11         x2.append(akt[1])
     12         colors.append(akt[4].split('-'))
     13         #print(akt)

IndexError: list index out of range

['5.1', '3.5', '1.4', '0.2', 'Iris-setosa']
['4.9', '3.0', '1.4', '0.2', 'Iris-setosa']
['4.7', '3.2', '1.3', '0.2', 'Iris-setosa']
['4.6', '3.1', '1.5', '0.2', 'Iris-setosa']
['5.0', '3.6', '1.4', '0.2', 'Iris-setosa']
['5.4', '3.9', '1.7', '0.4', 'Iris-setosa']
['4.6', '3.4', '1.4', '0.3', 'Iris-setosa']
['5.0', '3.4', '1.5', '0.2', 'Iris-setosa']
['4.4', '2.9', '1.4', '0.2', 'Iris-setosa']
['4.9', '3.1', '1.5', '0.1', 'Iris-setosa']
['5.4', '3.7', '1.5', '0.2', 'Iris-setosa']
['4.8', '3.4', '1.6', '0.2', 'Iris-setosa']
['4.8', '3.0', '1.4', '0.1', 'Iris-setosa']
['4.3', '3.0', '1.1', '0.1', 'Iris-setosa']
['5.8', '4.0', '1.2', '0.2', 'Iris-setosa']
['5.7', '4.4', '1.5', '0.4', 'Iris-setosa']
['5.4', '3.9', '1.3', '0.4', 'Iris-setosa']
['5.1', '3.5', '1.4', '0.3', 'Iris-setosa']
['5.7', '3.8', '1.7', '0.3', 'Iris-setosa']
['5.1', '3.8', '1.5', '0.3', 'Iris-setosa']
['5.4', '3.4', '1.7', '0.2', 'Iris-setosa']
['5.1', '3.7', '1.5', '0.4', 'Iris-setosa']
['4.6', '3.6', '1.0', '0.2', 'Iris-setosa']
['5.1', '3.3', '1.7', '0.5', 'Iris-setosa']
['4.8', '3.4', '1.9', '0.2', 'Iris-setosa']
['5.0', '3.0', '1.6', '0.2', 'Iris-setosa']
['5.0', '3.4', '1.6', '0.4', 'Iris-setosa']
['5.2', '3.5', '1.5', '0.2', 'Iris-setosa']
['5.2', '3.4', '1.4', '0.2', 'Iris-setosa']
['4.7', '3.2', '1.6', '0.2', 'Iris-setosa']
['4.8', '3.1', '1.6', '0.2', 'Iris-setosa']
['5.4', '3.4', '1.5', '0.4', 'Iris-setosa']
['5.2', '4.1', '1.5', '0.1', 'Iris-setosa']
['5.5', '4.2', '1.4', '0.2', 'Iris-setosa']
['4.9', '3.1', '1.5', '0.1', 'Iris-setosa']
['5.0', '3.2', '1.2', '0.2', 'Iris-setosa']
['5.5', '3.5', '1.3', '0.2', 'Iris-setosa']
['4.9', '3.1', '1.5', '0.1', 'Iris-setosa']
['4.4', '3.0', '1.3', '0.2', 'Iris-setosa']
['5.1', '3.4', '1.5', '0.2', 'Iris-setosa']
['5.0', '3.5', '1.3', '0.3', 'Iris-setosa']
['4.5', '2.3', '1.3', '0.3', 'Iris-setosa']
['4.4', '3.2', '1.3', '0.2', 'Iris-setosa']
['5.0', '3.5', '1.6', '0.6', 'Iris-setosa']
['5.1', '3.8', '1.9', '0.4', 'Iris-setosa']
['4.8', '3.0', '1.4', '0.3', 'Iris-setosa']
['5.1', '3.8', '1.6', '0.2', 'Iris-setosa']
['4.6', '3.2', '1.4', '0.2', 'Iris-setosa']
['5.3', '3.7', '1.5', '0.2', 'Iris-setosa']
['5.0', '3.3', '1.4', '0.2', 'Iris-setosa']
['7.0', '3.2', '4.7', '1.4', 'Iris-versicolor']
['6.4', '3.2', '4.5', '1.5', 'Iris-versicolor']
['6.9', '3.1', '4.9', '1.5', 'Iris-versicolor']
['5.5', '2.3', '4.0', '1.3', 'Iris-versicolor']
['6.5', '2.8', '4.6', '1.5', 'Iris-versicolor']
['5.7', '2.8', '4.5', '1.3', 'Iris-versicolor']
['6.3', '3.3', '4.7', '1.6', 'Iris-versicolor']
['4.9', '2.4', '3.3', '1.0', 'Iris-versicolor']
['6.6', '2.9', '4.6', '1.3', 'Iris-versicolor']
['5.2', '2.7', '3.9', '1.4', 'Iris-versicolor']
['5.0', '2.0', '3.5', '1.0', 'Iris-versicolor']
['5.9', '3.0', '4.2', '1.5', 'Iris-versicolor']
['6.0', '2.2', '4.0', '1.0', 'Iris-versicolor']
['6.1', '2.9', '4.7', '1.4', 'Iris-versicolor']
['5.6', '2.9', '3.6', '1.3', 'Iris-versicolor']
['6.7', '3.1', '4.4', '1.4', 'Iris-versicolor']
['5.6', '3.0', '4.5', '1.5', 'Iris-versicolor']
['5.8', '2.7', '4.1', '1.0', 'Iris-versicolor']
['6.2', '2.2', '4.5', '1.5', 'Iris-versicolor']
['5.6', '2.5', '3.9', '1.1', 'Iris-versicolor']
['5.9', '3.2', '4.8', '1.8', 'Iris-versicolor']
['6.1', '2.8', '4.0', '1.3', 'Iris-versicolor']
['6.3', '2.5', '4.9', '1.5', 'Iris-versicolor']
['6.1', '2.8', '4.7', '1.2', 'Iris-versicolor']
['6.4', '2.9', '4.3', '1.3', 'Iris-versicolor']
['6.6', '3.0', '4.4', '1.4', 'Iris-versicolor']
['6.8', '2.8', '4.8', '1.4', 'Iris-versicolor']
['6.7', '3.0', '5.0', '1.7', 'Iris-versicolor']
['6.0', '2.9', '4.5', '1.5', 'Iris-versicolor']
['5.7', '2.6', '3.5', '1.0', 'Iris-versicolor']
['5.5', '2.4', '3.8', '1.1', 'Iris-versicolor']
['5.5', '2.4', '3.7', '1.0', 'Iris-versicolor']
['5.8', '2.7', '3.9', '1.2', 'Iris-versicolor']
['6.0', '2.7', '5.1', '1.6', 'Iris-versicolor']
['5.4', '3.0', '4.5', '1.5', 'Iris-versicolor']
['6.0', '3.4', '4.5', '1.6', 'Iris-versicolor']
['6.7', '3.1', '4.7', '1.5', 'Iris-versicolor']
['6.3', '2.3', '4.4', '1.3', 'Iris-versicolor']
['5.6', '3.0', '4.1', '1.3', 'Iris-versicolor']
['5.5', '2.5', '4.0', '1.3', 'Iris-versicolor']
['5.5', '2.6', '4.4', '1.2', 'Iris-versicolor']
['6.1', '3.0', '4.6', '1.4', 'Iris-versicolor']
['5.8', '2.6', '4.0', '1.2', 'Iris-versicolor']
['5.0', '2.3', '3.3', '1.0', 'Iris-versicolor']
['5.6', '2.7', '4.2', '1.3', 'Iris-versicolor']
['5.7', '3.0', '4.2', '1.2', 'Iris-versicolor']
['5.7', '2.9', '4.2', '1.3', 'Iris-versicolor']
['6.2', '2.9', '4.3', '1.3', 'Iris-versicolor']
['5.1', '2.5', '3.0', '1.1', 'Iris-versicolor']
['5.7', '2.8', '4.1', '1.3', 'Iris-versicolor']
['6.3', '3.3', '6.0', '2.5', 'Iris-virginica']
['5.8', '2.7', '5.1', '1.9', 'Iris-virginica']
['7.1', '3.0', '5.9', '2.1', 'Iris-virginica']
['6.3', '2.9', '5.6', '1.8', 'Iris-virginica']
['6.5', '3.0', '5.8', '2.2', 'Iris-virginica']
['7.6', '3.0', '6.6', '2.1', 'Iris-virginica']
['4.9', '2.5', '4.5', '1.7', 'Iris-virginica']
['7.3', '2.9', '6.3', '1.8', 'Iris-virginica']
['6.7', '2.5', '5.8', '1.8', 'Iris-virginica']
['7.2', '3.6', '6.1', '2.5', 'Iris-virginica']
['6.5', '3.2', '5.1', '2.0', 'Iris-virginica']
['6.4', '2.7', '5.3', '1.9', 'Iris-virginica']
['6.8', '3.0', '5.5', '2.1', 'Iris-virginica']
['5.7', '2.5', '5.0', '2.0', 'Iris-virginica']
['5.8', '2.8', '5.1', '2.4', 'Iris-virginica']
['6.4', '3.2', '5.3', '2.3', 'Iris-virginica']
['6.5', '3.0', '5.5', '1.8', 'Iris-virginica']
['7.7', '3.8', '6.7', '2.2', 'Iris-virginica']
['7.7', '2.6', '6.9', '2.3', 'Iris-virginica']
['6.0', '2.2', '5.0', '1.5', 'Iris-virginica']
['6.9', '3.2', '5.7', '2.3', 'Iris-virginica']
['5.6', '2.8', '4.9', '2.0', 'Iris-virginica']
['7.7', '2.8', '6.7', '2.0', 'Iris-virginica']
['6.3', '2.7', '4.9', '1.8', 'Iris-virginica']
['6.7', '3.3', '5.7', '2.1', 'Iris-virginica']
['7.2', '3.2', '6.0', '1.8', 'Iris-virginica']
['6.2', '2.8', '4.8', '1.8', 'Iris-virginica']
['6.1', '3.0', '4.9', '1.8', 'Iris-virginica']
['6.4', '2.8', '5.6', '2.1', 'Iris-virginica']
['7.2', '3.0', '5.8', '1.6', 'Iris-virginica']
['7.4', '2.8', '6.1', '1.9', 'Iris-virginica']
['7.9', '3.8', '6.4', '2.0', 'Iris-virginica']
['6.4', '2.8', '5.6', '2.2', 'Iris-virginica']
['6.3', '2.8', '5.1', '1.5', 'Iris-virginica']
['6.1', '2.6', '5.6', '1.4', 'Iris-virginica']
['7.7', '3.0', '6.1', '2.3', 'Iris-virginica']
['6.3', '3.4', '5.6', '2.4', 'Iris-virginica']
['6.4', '3.1', '5.5', '1.8', 'Iris-virginica']
['6.0', '3.0', '4.8', '1.8', 'Iris-virginica']
['6.9', '3.1', '5.4', '2.1', 'Iris-virginica']
['6.7', '3.1', '5.6', '2.4', 'Iris-virginica']
['6.9', '3.1', '5.1', '2.3', 'Iris-virginica']
['5.8', '2.7', '5.1', '1.9', 'Iris-virginica']
['6.8', '3.2', '5.9', '2.3', 'Iris-virginica']
['6.7', '3.3', '5.7', '2.5', 'Iris-virginica']
['6.7', '3.0', '5.2', '2.3', 'Iris-virginica']
['6.3', '2.5', '5.0', '1.9', 'Iris-virginica']
['6.5', '3.0', '5.2', '2.0', 'Iris-virginica']
['6.2', '3.4', '5.4', '2.3', 'Iris-virginica']
['5.9', '3.0', '5.1', '1.8', 'Iris-virginica']
['']

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Проблема в том, что в строке есть только один столбец. Вы не поймали его с помощью print(akt), потому что вы печатаете только текущую строку после исключения, поэтому ошибочная строка никогда не видна.

Вам необходимо проверить входные данные и выдать ошибку политика обращения Вот пример, где я обновился, чтобы использовать модуль csv, и здравый смысл проверяет строку, прежде чем пытаться ее использовать. Я не знаю вашей ситуации, поэтому я добавил случаи, чтобы игнорировать один тип ошибки, но выдал исключение для другого.

import csv

x1 = []
x2 = []
colors = []

with open("iris.csv" ,"r") as csvfile:
    reader = csv.reader(csvfile):
        for i, akt in enumerate(csvfile, 1):
            # debug
            # print(akt)
            # Your error policy here. As an example, I'm going to allow
            # empty lines but not miscounted columns
            if not akt:
                continue
            if len(akt) != 5:
                raise ValueError("Invalid column in iris.csv line {}".format(i))
            x1.append(akt[0])
            x2.append(akt[1])
            colors.append(akt[4])
0 голосов
/ 02 мая 2020

Я бы предпочел использовать pandas всякий раз, когда я имею дело с CSV-файлами

import pandas as pd

df = pd.read_csv("iris.csv")
columns = df.columns

x1 = df[columns[0]].tolist()
x2 = df[columns[1]].tolist()
colors  = df[columns[4]].tolist()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...