массив значений даты и времени - PullRequest
1 голос
/ 19 февраля 2020

У меня есть следующий код, где я пытаюсь заполнить массив датами 1988-2016

from datetime import datetime, timedelta
t = np.arange(datetime(1988,1,1), datetime(2016,1,1), timedelta(days=365)).astype(datetime)

Это дает мне следующий вывод:

array([datetime.datetime(1988, 1, 1, 0, 0),
       datetime.datetime(1988, 12, 31, 0, 0),
       datetime.datetime(1989, 12, 31, 0, 0),
                 ....
       datetime.datetime(2015, 12, 25, 0, 0)], dtype=object)

Однако для моего выходные данные я просто хочу иметь год, а не месяц или день, и я не хочу, чтобы datetime.datetime в начале. Так что я жду чего-то вроде этого:

array([(1988)
      (1989),
      (1990),
        ...
      (2015)], dtype=object)

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

Использование numpy .datetime64 .

import numpy as np
t = np.arange('1988','2016',dtype='datetime64[Y]')

Переменная будет иметь представление

array(['1988', '1989', '1990', '1991', '1992', '1993', '1994', '1995',
   '1996', '1997', '1998', '1999', '2000', '2001', '2002', '2003',
   '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011',
   '2012', '2013', '2014', '2015'], dtype='datetime64[Y]')

Затем можно изменить форматер даты и времени

np.set_printoptions(formatter={'datetime': lambda x: '('+str(x)+')'})

Теперь переменная будет отформатирована как

array([(1988), (1989), (1990), (1991), (1992), (1993), (1994), (1995),
   (1996), (1997), (1998), (1999), (2000), (2001), (2002), (2003),
   (2004), (2005), (2006), (2007), (2008), (2009), (2010), (2011),
   (2012), (2013), (2014), (2015)], dtype='datetime64[Y]')
0 голосов
/ 19 февраля 2020

Это должно дать вам массив обоих лет как объектов даты и времени.

year_objects = []
num_years = 20
start_year = 1988
for i in range(num_years):
    x = datetime.datetime(start_year + i, 1, 1)
    year_objects.append(x) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...