From 2aa40188e66fc49064da2a99dc95b93ada501fa5 Mon Sep 17 00:00:00 2001 From: Brock Mendel Date: Wed, 8 Jan 2020 11:26:24 -0800 Subject: [PATCH 1/3] CLN: handle np.datetime64 at the same time as datetime in DTI.get_value --- pandas/core/indexes/datetimes.py | 2 +- pandas/tests/indexes/datetimes/test_indexing.py | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/pandas/core/indexes/datetimes.py b/pandas/core/indexes/datetimes.py index 9db30ce710c0d..e61752db2a67d 100644 --- a/pandas/core/indexes/datetimes.py +++ b/pandas/core/indexes/datetimes.py @@ -641,7 +641,7 @@ def get_value(self, series, key): know what you're doing """ - if isinstance(key, datetime): + if isinstance(key, (datetime, np.datetime64)): # needed to localize naive datetimes if self.tz is not None: diff --git a/pandas/tests/indexes/datetimes/test_indexing.py b/pandas/tests/indexes/datetimes/test_indexing.py index 97290c8c635b8..99a362e25d58d 100644 --- a/pandas/tests/indexes/datetimes/test_indexing.py +++ b/pandas/tests/indexes/datetimes/test_indexing.py @@ -613,6 +613,23 @@ def test_delete_slice(self): assert result.freq == expected.freq assert result.tz == expected.tz + def test_get_value(self): + # specifically make sure we have test for np.datetime64 key + dti = pd.date_range("2016-01-01", periods=3) + + arr = np.arange(6, 8) + + key = dti[1] + + result = dti.get_value(arr, key) + assert result == 7 + + result = dti.get_value(arr, key.to_pydatetime()) + assert result == 7 + + result = dti.get_value(arr, key.to_datetime64()) + assert result == 7 + def test_get_loc(self): idx = pd.date_range("2000-01-01", periods=3) From 6580fc49744234d8e0954ad4e548144964955feb Mon Sep 17 00:00:00 2001 From: Brock Mendel Date: Wed, 8 Jan 2020 11:28:18 -0800 Subject: [PATCH 2/3] wrap in Timestamp in fewer places --- pandas/core/indexes/datetimes.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pandas/core/indexes/datetimes.py b/pandas/core/indexes/datetimes.py index e61752db2a67d..21b8b6b695a82 100644 --- a/pandas/core/indexes/datetimes.py +++ b/pandas/core/indexes/datetimes.py @@ -642,13 +642,14 @@ def get_value(self, series, key): """ if isinstance(key, (datetime, np.datetime64)): + key = Timestamp(key) # needed to localize naive datetimes if self.tz is not None: if key.tzinfo is not None: - key = Timestamp(key).tz_convert(self.tz) + key = key.tz_convert(self.tz) else: - key = Timestamp(key).tz_localize(self.tz) + key = key.tz_localize(self.tz) return self.get_value_maybe_box(series, key) From 1c014501e273191a6270776fd1ccc486d254dcfb Mon Sep 17 00:00:00 2001 From: Brock Mendel Date: Wed, 8 Jan 2020 11:29:02 -0800 Subject: [PATCH 3/3] prune redundant --- pandas/core/indexes/datetimes.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/pandas/core/indexes/datetimes.py b/pandas/core/indexes/datetimes.py index 21b8b6b695a82..ae0a71dfa2c49 100644 --- a/pandas/core/indexes/datetimes.py +++ b/pandas/core/indexes/datetimes.py @@ -642,15 +642,6 @@ def get_value(self, series, key): """ if isinstance(key, (datetime, np.datetime64)): - key = Timestamp(key) - - # needed to localize naive datetimes - if self.tz is not None: - if key.tzinfo is not None: - key = key.tz_convert(self.tz) - else: - key = key.tz_localize(self.tz) - return self.get_value_maybe_box(series, key) if isinstance(key, time):