diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index c5cfa4c2d1fcd..86f2793341d76 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -1,6 +1,9 @@ from __future__ import annotations -from datetime import datetime +from datetime import ( + date, + datetime, +) import functools from itertools import zip_longest import operator @@ -764,7 +767,11 @@ def _shallow_copy(self: _IndexT, values, name: Hashable = no_default) -> _IndexT name : Label, defaults to self.name """ name = self._name if name is no_default else name + u = self._simple_new(values, name=name) + if all(isinstance(x, date) for x in u): + from pandas import to_datetime + return to_datetime(u) return self._simple_new(values, name=name) def _view(self: _IndexT) -> _IndexT: diff --git a/pandas/tests/series/methods/test_reset_index.py b/pandas/tests/series/methods/test_reset_index.py index b159317bf813b..90bee53a860b8 100644 --- a/pandas/tests/series/methods/test_reset_index.py +++ b/pandas/tests/series/methods/test_reset_index.py @@ -1,4 +1,7 @@ -from datetime import datetime +from datetime import ( + date, + datetime, +) import numpy as np import pytest @@ -179,3 +182,23 @@ def test_reset_index_dtypes_on_empty_series_with_multiindex(array, dtype): {"level_0": np.int64, "level_1": np.float64, "level_2": dtype, 0: object} ) tm.assert_series_equal(result, expected) + + +def test_set_index_MultiIndex(): + df = DataFrame( + { + "date": [date(2021, 8, 1), date(2021, 8, 2), date(2021, 8, 3)], + "ticker": ["aapl", "goog", "yhoo"], + "value": [5.63269, 4.45609, 2.74843], + } + ) + + df.set_index(["date", "ticker"], inplace=True) + res = df.index.get_level_values(0) + ex = pd.DatetimeIndex( + ["2021-08-01", "2021-08-02", "2021-08-03"], + dtype="datetime64[ns]", + name="date", + freq=None, + ) + tm.assert_index_equal(ex, res)