Обычно tolist
лучше, чем list
. Он работает все время вниз и быстрее. list
просто перебирает первое измерение. Но преобразование в нативные типы Python зависит от типа dtype. В этом случае единицы времени имеют значение.
In [559]: arr = np.array(['2020-03-01T00:00:00.000000000', '2020-04-15T00:00:00.000000000',
...: '2020-07-21T00:00:00.000000000'], dtype='datetime64[ns]')
In [560]: arr.shape
Out[560]: (3,)
In [561]: arr.dtype
Out[561]: dtype('<M8[ns]')
list
является эквивалентом [x for x in arr]
, итерация по первому измерению:
In [562]: list(arr)
Out[562]:
[numpy.datetime64('2020-03-01T00:00:00.000000000'),
numpy.datetime64('2020-04-15T00:00:00.000000000'),
numpy.datetime64('2020-07-21T00:00:00.000000000')]
tolist
преобразует его до Python объектов - до конца:
In [563]: arr.tolist()
Out[563]: [1583020800000000000, 1586908800000000000, 1595289600000000000]
В то время как ns
дает целое число, другие единицы времени дают разные результаты:
In [564]: arr.astype('datetime64[D]')
Out[564]: array(['2020-03-01', '2020-04-15', '2020-07-21'], dtype='datetime64[D]')
In [565]: arr.astype('datetime64[D]').tolist()
Out[565]:
[datetime.date(2020, 3, 1),
datetime.date(2020, 4, 15),
datetime.date(2020, 7, 21)]
In [566]: arr.astype('datetime64[s]').tolist()
Out[566]:
[datetime.datetime(2020, 3, 1, 0, 0),
datetime.datetime(2020, 4, 15, 0, 0),
datetime.datetime(2020, 7, 21, 0, 0)]