a is an array of objects (dtype=object). It stores pointers to datetime objects, much like lists. Most math and logical operations don't work with this kind of array. That is why Wouter's answer uses list comprehensions.
There is a np.datetime64 dtype that implements a number of numeric operations. Mostly I see it in the context of structured arrays produced from csv files (via genfromtxt).
a could be converted to this type with another comprehension:
In [202]: b=np.array([np.datetime64(x.isoformat(),'s') for x in a])
In [203]: b
Out[203]:
array(['2015-01-01T10:11:55-0800', '2015-01-01T20:11:55-0800',
'2015-02-02T06:11:55-0800', '2015-03-02T16:11:55-0800',
'2015-02-03T02:11:55-0800', '2015-01-03T12:11:55-0800',
'2015-04-03T22:11:55-0700', '2015-03-04T08:11:55-0800',
'2015-05-04T18:11:55-0700', '2015-01-05T04:11:55-0800',
'2015-03-05T14:11:55-0800'], dtype='datetime64[s]')
I don't see a way of pulling out the 'month' itself, but it can be cast (viewed) to a month dtype:
In [136]: b1=b.astype('datetime64[M]')
In [137]: b1
Out[137]:
array(['2015-01', '2015-01', '2015-02', '2015-03', '2015-02', '2015-01',
'2015-04', '2015-03', '2015-05', '2015-01', '2015-03'], dtype='datetime64[M]')
and a mask generated with
In [138]: b1==np.datetime64('2015-01')
Out[138]:
array([ True, True, False, False, False, True, False, False, False,
True, False], dtype=bool)
and the 3 month groups selected via:
In [141]: a[b1==np.datetime64('2015-01')]
Out[141]:
array([datetime.datetime(2015, 1, 1, 10, 11, 55),
datetime.datetime(2015, 1, 1, 20, 11, 55),
datetime.datetime(2015, 1, 3, 12, 11, 55),
datetime.datetime(2015, 1, 5, 4, 11, 55)], dtype=object)
In [142]: a[b1==np.datetime64('2015-02')]
Out[142]:
array([datetime.datetime(2015, 2, 2, 6, 11, 55),
datetime.datetime(2015, 2, 3, 2, 11, 55)], dtype=object)
In [143]: a[b1==np.datetime64('2015-03')]
Out[143]:
array([datetime.datetime(2015, 3, 2, 16, 11, 55),
datetime.datetime(2015, 3, 4, 8, 11, 55),
datetime.datetime(2015, 3, 5, 14, 11, 55)], dtype=object)
I haven't done much with this dtype. In this case I don't see much advantage over treating a as a plain list, but if you are doing time and date differences, the numeric datatime is worth considering.
dtype=object. Each element is a pointer to adatetimeobject. It is basically the same as a list of those objects.