#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] указывает на последний столбец, который является строкой.