我对numpy比较陌生。我已经从.csv文件中导入数据,其中的日期为fromat YYYY,MM,DD和其他一些东西。我想将所有内容放在一个数组中,日期为“正确”的日期时间格式。这是我的代码:
na_trades = np.zeros((number_of_orders,), dtype = ('datetime64,a5,a5,i4'))
for row in range(number_of_orders):
order = na_trades_csv[row]
order_date = dt.datetime(order[0],order[1],order[2])
order_date64 = np.datetime64(order_date)
na_trades[row] = (order_date64,order[3],order[4],order[5])
但我收到错误ValueError: error setting an array element with a sequence
。知道为什么会这样吗?提前感谢您的帮助!
答案 0 :(得分:2)
使用numpy版本1.6.2,dtype = 'datetime64,a5,a5,i4'
不会产生预期的dtype:
In [36]: na_trades = np.zeros((number_of_orders,), dtype = 'datetime64,a5,a5,i4')
In [37]: na_trades
Out[37]: array([1970-01-01 00:00:00], dtype=datetime64[us])
这对我来说似乎是个错误 - 虽然我错了。请尝试改为:
na_trades = np.empty(number_of_orders,
dtype = [
('dt', 'datetime64'),
('foo','a5'),
('bar', 'a5'),
('baz', 'i4')])
答案 1 :(得分:1)
这是因为在numpy数组中(与python列表不同),您无法将序列分配给数组中的单个元素。 Python数组是非均匀的(例如,不同的元素可以是不同的类型)并且并不真正关心你投入它们的内容,而Numpy数组具有特定类型。您正在尝试将类型设置为复合类型(例如,具有datetime
,两个字符串和一个int的内容)但numpy忽略了dtype字符串中datetime64
之后的所有内容,因为您的语法稍微偏离。
尝试以下方法:
z = np.zeros((5,), dtype = np.dtype([('time','datetime64'),('year','a5'),('month','a5'),('day','i4')]))
这会创建一个类似字典的numpy.void
类型。例如。然后,您可以执行以下操作:
>>> z[0]
(datetime.datetime(1970, 1, 1, 0, 0), '', '', 0)
>>> z[0]['time']
1970-01-01 00:00:00
>>> z[0][0]
1970-01-01 00:00:00