2017-01-05 10 views
0

sqlite3に格納されたデータからnumpy配列を作成しようとしていて、文字列に問題があります。私が理解していることから、fromiterはこの作業を達成する最も効率的な方法です。 cursor.fetchall()でデータを取得した後、文字列は正しいです。しかし、数が少ない配列に入った後、それは失われます。fromiterでnumpy配列を作成

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]) 

そして、あなたは文字列 'Warm1' が「B」に変換されたばかり見ることができるように、これは出力 -

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

です。

あなたはそれがなぜ起こり、それを修正して文字列をインポートするのか知っていますか?

多くの感謝!

+1

'fromiter 'を使用する場合、文字列の最大サイズを指定する必要があります。あなたは 'dtype =( 'f、f、f、i、i8、

+0

'b '''は、Py3がバイト列をどのように表示するのか、 'S' dtypeです。ネイティブのUnicodeは 'U5'を試してください。 – hpaulj

+0

ありがとう! U5がトリックをしました。 – Mike

答えて

1

numpy配列の文字列は固定長で、fromiterの場合は長さをあらかじめ指定する必要があります。例えば。 dtype=('f, f, f, i, i8, S5')である。

関連する問題