python преобразование строк в значения с плавающей точкой, приводящее к ошибке

#python #string #floating-point

#python #строка #с плавающей запятой

Вопрос:

Я пытаюсь преобразовать строки из текстового файла с кодировкой: us-ascii. в np.float64. Данные представляют собой просто десятичные числа (положительные и отрицательные).

 with open(path) as fp:
            data=fp.readlines()
            enr_val = [[np.float(val) for val in line.split()[-1]] for line in data[0:]]
            print(np.shape(enr_val))
  

Я получаю следующие ошибки:

ValueError: не удалось преобразовать строку в float: ‘.’ и ValueError: не удалось преобразовать строку в float: ‘-‘

Итак, в основном дефис, указывающий, что число отрицательное, например, (‘-9’) и «.» в десятичных числах, таких как (9.2), вызывают эти проблемы. Я импортировал unicodedata, чтобы получить имена этих символов:

 print(*map(unicodedata.name, data[0].split()[-1][0]))
  

и получил следующий результат:
‘.’ является полной остановкой
а ‘-‘ — это ДЕФИС С МИНУСОМ

Я не понимаю, что вызывает проблему, и я не знаю, как ее решить.

Комментарии:

1. Вы уверены, что все значения преобразуются в значения с плавающей точкой?

2. ДА. Я только что напечатал некоторые значения, и вот результаты: 0.0 0.0 1 1 0.000000 1.000000 0.000000 -10.0 10.0 1 1 4.597581 0.000000 0.000000

3. Вы конвертируете отдельные символы. line.split()[-1] является единственной строкой, содержащей (например) '0.000000' . Когда вы это делаете, for val in line.split()[-1] каждое val значение представляет собой один символ из этой строки. Второй символ представляет собой десятичную точку. Возможно, вы хотели использовать line.split()[:-1] ?

4. Нет. Каждая строка содержит несколько столбцов, и я хочу прочитать только последний столбец. Итак, каждый val в line.split()[-1] указывает на последний столбец, который является строкой.