简体   繁体   English

将numpy数组转换为日期时间列表

[英]Convert numpy array to list of datetimes

I have a 2D array of dates of the form: 我有一个日期的二维数组:

[Y Y Y ... ]
[M M M ... ]
[D D D ... ]
[H H H ... ]
[M M M ... ]
[S S S ... ]

So it looks like 所以看起来

data = np.array([
    [2015, 2015, 2015, 2015, 2015, 2015], # ...
    [   1,    1,    1,    1,    1,    1],
    [   1,    1,    1,    2,    2,    2],
    [  23,   23,   23,    0,    0,    0],
    [   4,    5,    5,   37,   37,   37],
    [  59,    1,    2,   25,   27,   29]
])

What would be the best way to convert this into one list of datetime objects? 将其转换为日期时间对象列表的最佳方法是什么?

import datetime
import numpy as np

data = np.array(
    [[2015, 2015, 2015, 2015, 2015, 2015],
     [   1,    1,    1,    1,    1,    1],
     [   1,    1,    1,    2,    2,    2],
     [  23,   23,   23,    0,    0,    0],
     [   4,    5,    5,   37,   37,   37],
     [  59,    1,    2,   25,   27,   29]]
)

# Transpose the data so that columns become rows.
data = data.T

# A simple list comprehension does the trick, '*' making sure
# the values are unpacked for 'datetime.datetime'.
new_data = [datetime.datetime(*x) for x in data]

print(new_data)

[datetime.datetime(2015, 1, 1, 23, 4, 59), datetime.datetime(2015, 1, 1, 23, 5, 1), datetime.datetime(2015, 1, 1, 23, 5, 2), datetime.datetime(2015, 1, 2, 0, 37, 25), datetime.datetime(2015, 1, 2, 0, 37, 27), datetime.datetime(2015, 1, 2, 0, 37, 29)] [datetime.datetime(2015,1,1,23,4,59),datetime.datetime(2015,1,1,23,5,1),datetime.datetime(2015,1,1,23,5,2 ),datetime.datetime(2015、1、2、0、37、25),datetime.datetime(2015、1、2、0、37、27),datetime.datetime(2015、1、2、0、37, 29)]

If you want np.datetime64 objects, then this works: 如果您想要np.datetime64对象,则可以这样做:

import functools

units = 'YMDhms'
first_vals = np.array([1970, 1, 1, 0, 0, 0])
epoch = np.datetime64('1970')

results = functools.reduce(
    np.add,
    [
        d.astype('timedelta64[{}]'.format(unit))
        for d, unit in zip(data - first_vals[:,np.newaxis], units)
    ],
    epoch
)

Which gives: 这使:

array(['2015-01-01T23:04:59',
       '2015-01-01T23:05:01',
       '2015-01-01T23:05:02',
       '2015-01-02T00:37:25',
       '2015-01-02T00:37:27',
       '2015-01-02T00:37:29'], dtype='datetime64[s]')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM