Cannot populate NumPy datetime64 arrays

12,170

It should work if you also specify a time unit parameter when creating the array. For example:

>>> t = np.empty(3, dtype='datetime64[s]')
>>> t
array(['1970-01-01T00:00:00+0000', '1970-01-01T00:00:00+0000',
       '1970-01-01T00:00:00+0000'], dtype='datetime64[s]')

And then you can also assign the values as required:

>>> t[0] = np.datetime64('2014-12-12 20:20:20')
>>> t
array(['2014-12-12T20:20:20+0000', '1970-01-01T00:00:00+0000',
       '1970-01-01T00:00:00+0000'], dtype='datetime64[s]')

NumPy doesn't permit datetimes with generic units (i.e. no units) to be represented. Creating the array t without the unit parameter and then trying to access the first element t[0] will raise this error:

ValueError: Cannot convert a NumPy datetime value other than NaT with generic units

Here, NumPy isn't able to infer what units the representation of the datetime should have. Guessing might lead to erroneous values given the varying lengths of calendar months and years.

This point isn't very explicit in the documentation but can be gleaned from the datetime page and is noted in the source code here.

Share:
12,170
caliloo
Author by

caliloo

Updated on July 10, 2022

Comments

  • caliloo
    caliloo almost 2 years

    I'm trying to create a NumPy array that will subsequently be populated by some datetime values. I can't seem to make it work.

    import numpy as np
    t = np.empty(3,dtype='datetime64')
    t
    

    I get a TypeError: Invalid datetime unit "generic" in metadata.
    Same if I try :

    import numpy as np
    t = np.empty(3,dtype='datetime64')
    t[0] = np.datetime64('2014-12-12 20:20:20')
    

    I get:

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