其他分享
首页 > 其他分享> > 在genfromtxt中使用转换器功能失败

在genfromtxt中使用转换器功能失败

作者:互联网

当我尝试使用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(',','.'))

标签:python-3-x,matplotlib,genfromtxt,python,numpy
来源: https://codeday.me/bug/20191031/1978352.html