有人可以找出下面的代码有什么问题吗?
import numpy as np
data = np.recfromcsv("data.txt", delimiter=" ", names=['name', 'types', 'value'])
indices = np.where((data.name == 'david') * data.types.startswith('height'))
mean_value = np.mean(data.value[indices])
我想计算大卫的重量和身高的平均值并标记如下:
david>> mean(weight_2005 and weight_2012), mean (height_2005 and height_2012)
mark>> mean(weight_2005 and weight_2012), mean (height_2005 and height_2012)
来自text(data.txt)文件:
david weight_2005 50
david weight_2012 60
david height_2005 150
david height_2012 160
mark weight_2005 90
mark weight_2012 85
mark height_2005 160
mark height_2012 170
我正在使用python 3.2和numpy 1.8
上面的代码提供了类型错误,如下所示:
TypeError: startswith first arg must be bytes or a tuple of bytes, not numpy.str_
答案 0 :(得分:1)
使用Python3.2和numpy 1.7,这行可以使用
indices = np.where((data.name == b'david') * data.types.startswith(b'height'))
data
显示为:
rec.array([(b'david', b'weight_2005', 50),...],
dtype=[('name', 'S5'), ('types', 'S11'), ('value', '<i4')])
type(data.name[0])
是<class 'bytes'>
。
b'height'
也适用于Python2.7。
另一种选择是将所有数据转换为unicode(Python 3字符串)
dtype=[('name','U5'), ('types', 'U11'), ('value', '<i4')]
dataU=data.astype(dtype=dtype)
indices = np.where((dataU.name == 'david') * dataU.types.startswith('height'))
或
data = np.recfromtxt('data.txt', delimiter=" ",
names=['name', 'types', 'value'], dtype=dtype)
recfromcsv
看起来不是dtype
,而是recfromtxt
。{/ p>