2017-01-05 2 views
0

Я пытаюсь сделать numpy массивы из данных, хранящихся в sqlite3, и иметь проблему со строками. Из того, что я понимаю, fromiter является наиболее эффективным способом решения этой задачи. После получения данных с помощью cursor.fetchall() строка верна. Однако после входа в массив numpy он теряется.Создать массив numpy с fromiter

import sqlite3 
import numpy as np 

connection = sqlite3.connect('fermControlData.db') 

with connection: 
    cursor = connection.cursor() 
    sql = "SELECT Time, bTemp, aTemp, heaterStatus, gasMonitor, Location FROM dataLog WHERE beerName= 'Red Sled' ORDER BY Time" 
    cursor.execute(sql) 
    data = cursor.fetchall() 
    print(data[0], type(data[0][5])) 
    dataLog = np.fromiter(data, dtype=('f, f, f, i, i8, S')) 
    print(dataLog[0]) 

И это output-

(1480890498.4052606, 65.53, 66.42, 0, 0.0, 'Warm1') <class 'str'> 
(1480890496.0, 65.52999877929688, 66.41999816894531, 0, 0, b'') 

Как вы можете видеть строку «Теплый1» становится преобразованный б»».

Знаете ли вы, почему это происходит и как его исправить, чтобы импортировать строку?

Большое спасибо!

+1

при использовании 'fromiter', вы должны указать максимальный размер строк. вы могли бы попробовать 'dtype = ('f, f, f, i, i8,

+0

'b ''' - это то, как Py3 отображает байты, 'S' dtype. Попробуйте 'U5' для родного юникода. – hpaulj

+0

Спасибо! U5 сделал трюк. – Mike

ответ

1

Строки в массивах numpy фиксированы, а в случае fromiter вы должны указать эту длину заранее. Например. с dtype=('f, f, f, i, i8, S5').

Смежные вопросы