Продолжайте получать ValueError: недостаточно значений для распаковки (ожидаемое 2, полученное 1) - PullRequest
0 голосов
/ 20 января 2020

Я изучаю книгу Киндер и Нельсона Руководство для студентов по Python по физическому моделированию . В начале главы 3 приведена информация для загрузки подготовленных наборов данных, которые можно использовать для практики. Наборы данных находятся в zip-файле по адресу press.princeton.edu/titles/10644.html. Набор данных, который я пытаюсь использовать из zip-файла, - HIVseries.csv. Файл содержит 16 строк кода следующим образом:

0, 1.061e+05
0.0831, 93240
0.1465, 1.6672e+05
0.2587, 1.5378e+05
0.4828, 1.188e+05
0.7448, 1.169e+05
0.9817, 1.0957e+05
1.2563, 1.1135e+05
1.4926, 74388
1.7299, 83291
1.9915, 66435
3.0011, 35408
4.0109, 21125
5.009, 20450
5.9943, 15798
7.0028, 4785.2

Это два столбца чисел, разделенных запятой. На страницах 48 и 49 книга инструктирует меня загружать набор данных и генерировать данные в виде массива с помощью следующих команд:

import numpy as np

data_set=np.loadtxt("HIVseries.csv", delimiter=',')
my_file=open("HIVseries.csv")
temp_data=[]
for line in my_file:
    print(line)
    x, y = line.split(',')
    temp_data +=[(float(x), float(y))]
my_file.close()
data_set=np.array(temp_data)

Когда я выполняю эти команды, я получаю следующую ошибку: ValueError: недостаточно значений для распаковки (ожидается 2, получено 1)

Я не понимаю, почему я получаю эту ошибку. Команда line.split четко указывает Python для разделения данных, используя запятые в файле. Кроме того, я ввожу все точно так, как говорит мне книга. Как в мире это может сказать мне, что существует только одно значение, когда есть явно два значения?

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Я наконец понял это. Файл данных содержал несколько пустых строк перед данными. Python читал эти строки, как будто они что-то значат.

0 голосов
/ 20 января 2020

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

Для отладки вы можете вставить дополнительную строку перед x, y = line.split(','), import pdb; pdb.set_trace() и запустить программа снова. Таким образом, программа остановится до x, y = line.split(',') и даст вам возможность запустить интерактивный код. Например, вы можете увидеть, как выглядит каждый line и какой из них выдает ошибку.

...