python numpy结构化数组问题

python numpy结构化数组问题,python,datetime,numpy,Python,Datetime,Numpy,我对numpy还比较陌生。我已经从.csv文件中导入了日期为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 =

我对numpy还比较陌生。我已经从.csv文件中导入了日期为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])

但是我得到了error
ValueError:error设置一个数组元素的序列。你知道为什么吗?提前谢谢你的帮助

使用numpy版本1.6.2,
dtype='datetime64,a5,a5,i4'
不会产生预期的数据类型:

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')])

这是因为在numpy数组中(与python列表不同),不能将序列分配给数组中的单个元素。Python数组是非同质的(例如,不同的元素可以是不同的类型),并不真正关心您在其中加入了什么,而Numpy数组有一个特定的类型。您试图将该类型设置为复合类型(例如,带有
datetime
、两个字符串和一个int的内容),但numpy忽略了数据类型字符串中
datetime64
之后的所有内容,因为您的语法有点不正确

请尝试以下操作:

z = np.zeros((5,), dtype = np.dtype([('time','datetime64'),('year','a5'),('month','a5'),('day','i4')]))
>>> 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
这将创建一个类似于字典的
numpy.void
类型。例如,然后您可以执行以下操作:

z = np.zeros((5,), dtype = np.dtype([('time','datetime64'),('year','a5'),('month','a5'),('day','i4')]))
>>> 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

太棒了,我几乎失去了希望;)谢谢