np.datetime64 values cast to datetime.date iff dtype == M8 · Issue #6529 · pandas-dev/pandas (original) (raw)
This seems a little inconsistent to me. IMHO, it would be good to be able to rely on the the fact that if you specify a numpy array of any datetime64 type the result will still be a datetime64 type and not cast to a different type dependant on the exact dtype passed in.
In [1]: dates = pd.date_range('01-Jan-2015', '01-Dec-2015', freq='M') ...: values1 = dates.view(np.ndarray).astype('M8[D]') ...: values2 = dates.view(np.ndarray).astype('datetime64[ns]') ...: series1 = pd.TimeSeries(values1, dates) ...: series2 = pd.TimeSeries(values2, dates) ...:
In [2]: series1 Out[2]: 2015-01-31 2015-01-31 2015-02-28 2015-02-28 2015-03-31 2015-03-31 2015-04-30 2015-04-30 2015-05-31 2015-05-31 2015-06-30 2015-06-30 2015-07-31 2015-07-31 2015-08-31 2015-08-31 2015-09-30 2015-09-30 2015-10-31 2015-10-31 2015-11-30 2015-11-30 Freq: M, dtype: object
In [3]: series2 Out[3]: 2015-01-31 2015-01-31 2015-02-28 2015-02-28 2015-03-31 2015-03-31 2015-04-30 2015-04-30 2015-05-31 2015-05-31 2015-06-30 2015-06-30 2015-07-31 2015-07-31 2015-08-31 2015-08-31 2015-09-30 2015-09-30 2015-10-31 2015-10-31 2015-11-30 2015-11-30 Freq: M, dtype: datetime64[ns]
In [4]: series1.values Out[4]: array([datetime.date(2015, 1, 31), datetime.date(2015, 2, 28), datetime.date(2015, 3, 31), datetime.date(2015, 4, 30), datetime.date(2015, 5, 31), datetime.date(2015, 6, 30), datetime.date(2015, 7, 31), datetime.date(2015, 8, 31), datetime.date(2015, 9, 30), datetime.date(2015, 10, 31), datetime.date(2015, 11, 30)], dtype=object)
In [5]: series2.values Out[5]: array(['2015-01-31T00:00:00.000000000+0000', '2015-02-28T00:00:00.000000000+0000', '2015-03-31T01:00:00.000000000+0100', '2015-04-30T01:00:00.000000000+0100', '2015-05-31T01:00:00.000000000+0100', '2015-06-30T01:00:00.000000000+0100', '2015-07-31T01:00:00.000000000+0100', '2015-08-31T01:00:00.000000000+0100', '2015-09-30T01:00:00.000000000+0100', '2015-10-31T00:00:00.000000000+0000', '2015-11-30T00:00:00.000000000+0000'], dtype='datetime64[ns]')
In [6]: pd.version Out[6]: '0.13.1-339-g6c3755b'