我尝试使用datetime coloumn构建一个结构化数组
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'
有没有办法解决这个问题?
答案 0 :(得分:3)
创建数组时,您必须指定datetime64
以秒为单位,因为您解析并尝试分配的数组是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
对象。您尝试分配一个秒分辨率,并在构造阵列时创建了另一个(默认情况下我认为它是纳秒)。
答案 1 :(得分: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')])