3

我尝试使用日期时间列构建结构化数组

import numpy as np
na_trades = np.zeros(2, dtype = 'datetime64,i4')
na_trades[0] = (np.datetime64('1970-01-01 00:00:00'),0)

TypeError: Cannot cast NumPy timedelta64 scalar from metadata [s] to  according to the rule 'same_kind'

有没有办法解决这个问题?

4

2 回答 2

3

您必须在创建数组时指定datetime64is 以秒为单位,因为您解析并尝试分配的是 a datetime64[s]

na_trades = np.zeros(2, dtype='datetime64[s],i4')
na_trades[0] = (np.datetime64('1971-01-01 00:00:00'), 0)

您得到的错误意味着datetime64您指定的对象不是same_kind您尝试评估的对象。您尝试分配一个秒分辨率,并在构建数组时创建了一个不同的分辨率(默认情况下,我认为它是纳秒)。

于 2013-08-16T10:43:17.510 回答
2

尝试以下操作:

>>> na_trades = np.zeros(2, dtype=[('dt', 'datetime64[s]'), ('vol', 'i4')])
>>> na_trades
array([(datetime.datetime(1970, 1, 1, 0, 0), 0),
       (datetime.datetime(1970, 1, 1, 0, 0), 0)], 
      dtype=[('dt', ('<M8[s]', {})), ('vol', '<i4')])
>>> na_trades[0] = (np.datetime64('1970-01-02 00:00:00'),1)
>>> na_trades
array([(datetime.datetime(4707, 11, 29, 0, 0), 1),
       (datetime.datetime(1970, 1, 1, 0, 0), 0)], 
      dtype=[('dt', ('<M8[s]', {})), ('vol', '<i4')])
于 2013-08-16T10:44:33.457 回答