当我尝试使用 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。
显然,genfromtxt 将读取列作为字节字符串提供给转换器函数,而不是作为 unicode 字符串。
通过更改转换器函数的代码为我解决了问题,如下所示:
conv = lambda valstr: float(valstr.decode("utf-8").replace(',','.'))