Skip to content

BUG: Change of behavior in casting of datetime-like types in MultiIndex #44081

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 12 commits into from
7 changes: 7 additions & 0 deletions pandas/core/indexes/multi.py
Original file line number Diff line number Diff line change
Expand Up @@ -1673,6 +1673,13 @@ def get_level_values(self, level):
"""
level = self._get_level_number(level)
values = self._get_level_values(level)
from pandas import to_datetime

try:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This implementation doesn't seem right.. What are you trying to do?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am trying to ensure the behavior of DatetimeIndex reverts to 1.2.5

Copy link
Member

@phofl phofl Oct 18, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since this seems to be a regression, please investigate what changed and caused the issue and try to restore the original behavior. Calling try except here should not be necessary

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have removed the try except block

values = to_datetime(values)
except ValueError:
pass

return values

@doc(Index.unique)
Expand Down
21 changes: 21 additions & 0 deletions pandas/tests/series/methods/test_reset_index.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import datetime as dt
from datetime import datetime
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

import date here instead of importing 'dt'

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done


import numpy as np
Expand Down Expand Up @@ -179,3 +180,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(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

since you're testing the DataFrame behavior, this probably goes in the tests/frame/methods file

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually in this file, there are a lot of tests regarding setting of indexes, hence I have kept this file.

{
"date": [dt.date(2021, 8, 1), dt.date(2021, 8, 2), dt.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)