Skip to content

np.datetime64 values cast to datetime.date iff dtype == M8 #6529

Closed
@dhirschfeld

Description

@dhirschfeld

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'

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions