3

genfromtxt を使用してスペースで区切られたファイルを読み取ろうとし、コンバーター関数を使用してコンマを小数点として数値を変換すると、型エラーが発生します。私のコンバーター機能に問題があるようです。ただし、単一の値で使用すると、正しく機能します。

これは私のコードです (私は Matplotlib/Pylab を使用しています):

t = dtype([('Date', 'U12'), ('Time', 'U10'), ('Cond', 'f4'), ('Temp', 'f4')])

conv = lambda valstr: float(valstr.replace(',','.'))

c = {2:conv, 3:conv}

data = genfromtxt('Example.csv', dtype = t,
    skip_header=1, delimiter = ' ', converters = c)

データは次のようになります。

Date Time Cond Temp
11-10-2012 00:00:14 5,430583 29,5107
11-10-2012 00:00:15 5,431812 29,45066
11-10-2012 00:00:16 5,435501 29,43862
11-10-2012 00:00:17 5,436732 29,43862
...

そして、これはエラーメッセージの一部です:


TypeError                                 Traceback (most recent call last)
<ipython-input-41-c65c2d17c55d> in <module>()
      5 c = {2:conv, 3:conv}
      6 
----> 7 data = genfromtxt('Example.csv', dtype = t, skip_header=1, delimiter = ' ', converters = c)


...


<ipython-input-41-c65c2d17c55d> in <lambda>(valstr)
      1 t = dtype([('Date', 'U12'), ('Time', 'U10'), ('Cond', 'f4'), ('Temp', 'f4')])
      2 
----> 3 conv = lambda valstr: float(valstr.replace(',','.'))
      4 
      5 c = {2:conv, 3:conv}

TypeError: expected an object with the buffer interface

ここで何か間違ったことをしていますか、それとも genfromtxt の何らかのバグですか?

Win7 x64 で Python 3.2 を使用しています。Numpy のバージョンは 1.6.2 です。

4

1 に答える 1

4

どうやら、genfromtxt フィードは列をコンバーター関数に Unicode 文字列ではなくバイト文字列として読み取ります。

問題は、コンバーター関数のコードを次のように変更することで解決されました。

conv = lambda valstr: float(valstr.decode("utf-8").replace(',','.'))
于 2012-10-15T08:39:21.113 に答える