Не удалось преобразовать строку в число с плавающей точкой при использовании numpy.loadtxt - PullRequest
0 голосов
/ 26 апреля 2018

Код:

import csv
import numpy
raw_data = open('C:\\Users\\train.csv', 'rt')
data = numpy.loadtxt(raw_data, delimiter=",")
print(data.shape)

Ниже приведены данные выборки

Time    Freq
8:00    91.1
8:03    91.1
8:06    91.1
8:09    91.1
8:12    91.1
8:15    91.1
8:18    91.1
8:21    91.1
8:24    91.1
8:27    91.1
8:30    91.1

Error:
ValueError: could not convert string to float: b'Time'

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018
In [350]: txt ='''Time    Freq
     ...: 8:00    91.1
     ...: 8:03    91.1
     ...: 8:06    91.1
     ...: 8:09    91.1
     ...: 8:12    91.1
     ...: 8:15    91.1
     ...: 8:18    91.1
     ...: 8:21    91.1
     ...: 8:24    91.1
     ...: 8:27    91.1
     ...: 8:30    91.1
     ...: '''

Загрузка в виде структурированного массива с использованием первой строки в качестве имен полей.

In [351]: data = np.genfromtxt(txt.splitlines(),names=True,dtype=None,encoding=N
     ...: one)
In [352]: data
Out[352]: 
array([('8:00', 91.1), ('8:03', 91.1), ('8:06', 91.1), ('8:09', 91.1),
       ('8:12', 91.1), ('8:15', 91.1), ('8:18', 91.1), ('8:21', 91.1),
       ('8:24', 91.1), ('8:27', 91.1), ('8:30', 91.1)],
      dtype=[('Time', '<U4'), ('Freq', '<f8')])
In [353]: data['Freq']
Out[353]: array([91.1, 91.1, 91.1, 91.1, 91.1, 91.1, 91.1, 91.1, 91.1, 91.1, 91.1])

Обратите внимание, что 2-й столбец был загружен как числа, а первый - как строки.

0 голосов
/ 26 апреля 2018

По умолчанию numpy.loadtext ожидает, что все в файле будет числом. Time это не число. 8:00 тоже не число. Если вы хотите выполнить числовые операции с вашими данными, вам нужно будет удалить заголовок Time Freq и преобразовать время в числа.

Если вам не нужно выполнять какой-либо числовой анализ, вы можете импортировать данные в виде строк. numpy.loadtxt(raw_data, delimiter=",", dtype='str'). См. документы для получения дополнительной информации.

1011 *
*

В качестве альтернативы вы можете использовать genfromtxt .

...