From 91a5b793e377b22243fbfaaf348aa65034907adb Mon Sep 17 00:00:00 2001 From: Tom Augspurger Date: Tue, 30 Jan 2018 14:21:49 -0600 Subject: [PATCH 1/2] BUG: Fixed accessor for Categorical[Datetime] --- pandas/core/indexes/accessors.py | 5 ++++- pandas/tests/series/test_datetime_values.py | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/pandas/core/indexes/accessors.py b/pandas/core/indexes/accessors.py index d40230386216c..c5b300848876e 100644 --- a/pandas/core/indexes/accessors.py +++ b/pandas/core/indexes/accessors.py @@ -72,9 +72,12 @@ def _delegate_property_get(self, name): # blow up if we operate on categories if self.orig is not None: result = take_1d(result, self.orig.cat.codes) + index = self.orig.index + else: + index = self.index # return the result as a Series, which is by definition a copy - result = Series(result, index=self.index, name=self.name) + result = Series(result, index=index, name=self.name) # setting this object will show a SettingWithCopyWarning/Error result._is_copy = ("modifications to a property of a datetimelike " diff --git a/pandas/tests/series/test_datetime_values.py b/pandas/tests/series/test_datetime_values.py index b79d8def905af..1039d462fe543 100644 --- a/pandas/tests/series/test_datetime_values.py +++ b/pandas/tests/series/test_datetime_values.py @@ -259,6 +259,14 @@ def f(): pytest.raises(com.SettingWithCopyError, f) + def test_dt_namespace_accessor_categorical(self): + # GH 19468 + dti = pd.DatetimeIndex(['20171111', '20181212']).repeat(2) + s = pd.Series(pd.Categorical(dti), name='foo') + result = s.dt.year + expected = pd.Series([2017, 2017, 2018, 2018], name='foo') + tm.assert_series_equal(result, expected) + def test_dt_accessor_no_new_attributes(self): # https://github.com/pandas-dev/pandas/issues/10673 s = Series(date_range('20130101', periods=5, freq='D')) From ac959464f1f69b4a39407b071ad43729cc0f1632 Mon Sep 17 00:00:00 2001 From: Tom Augspurger Date: Wed, 31 Jan 2018 06:03:02 -0600 Subject: [PATCH 2/2] Fixup --- pandas/tests/series/test_datetime_values.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pandas/tests/series/test_datetime_values.py b/pandas/tests/series/test_datetime_values.py index 1039d462fe543..16322b8b642ec 100644 --- a/pandas/tests/series/test_datetime_values.py +++ b/pandas/tests/series/test_datetime_values.py @@ -261,10 +261,10 @@ def f(): def test_dt_namespace_accessor_categorical(self): # GH 19468 - dti = pd.DatetimeIndex(['20171111', '20181212']).repeat(2) - s = pd.Series(pd.Categorical(dti), name='foo') + dti = DatetimeIndex(['20171111', '20181212']).repeat(2) + s = Series(pd.Categorical(dti), name='foo') result = s.dt.year - expected = pd.Series([2017, 2017, 2018, 2018], name='foo') + expected = Series([2017, 2017, 2018, 2018], name='foo') tm.assert_series_equal(result, expected) def test_dt_accessor_no_new_attributes(self):