From df13ccc437322456eea8596741089f750caa4740 Mon Sep 17 00:00:00 2001 From: sinhrks Date: Tue, 3 May 2016 12:13:05 +0900 Subject: [PATCH] BUG: Period resample with length=0 doesn't set freq --- doc/source/whatsnew/v0.18.2.txt | 2 ++ pandas/tseries/resample.py | 5 ++++- pandas/tseries/tests/test_resample.py | 13 +++++++------ 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/doc/source/whatsnew/v0.18.2.txt b/doc/source/whatsnew/v0.18.2.txt index fee98720990e0..cf37f634cda69 100644 --- a/doc/source/whatsnew/v0.18.2.txt +++ b/doc/source/whatsnew/v0.18.2.txt @@ -74,3 +74,5 @@ Performance Improvements Bug Fixes ~~~~~~~~~ + +- Bug in ``.resample`` empty data with ``PeriodIndex`` doesn't change ``freq`` (:issue:`13067`) \ No newline at end of file diff --git a/pandas/tseries/resample.py b/pandas/tseries/resample.py index a0f08a93a07d9..167c6c1d23b70 100644 --- a/pandas/tseries/resample.py +++ b/pandas/tseries/resample.py @@ -790,7 +790,10 @@ def _downsample(self, how, **kwargs): new_index = self._get_new_index() if len(new_index) == 0: - return self._wrap_result(self._selected_obj.reindex(new_index)) + result = self._selected_obj + if isinstance(self._selected_obj.index, PeriodIndex): + result = result.asfreq(self.freq, how=self.convention) + return self._wrap_result(result.reindex(new_index)) # Start vs. end of period memb = ax.asfreq(self.freq, how=self.convention) diff --git a/pandas/tseries/tests/test_resample.py b/pandas/tseries/tests/test_resample.py index 77396c3e38c93..c7962772ae837 100644 --- a/pandas/tseries/tests/test_resample.py +++ b/pandas/tseries/tests/test_resample.py @@ -2043,17 +2043,18 @@ def test_resample_basic(self): assert_series_equal(result2, expected) def test_resample_empty(self): - # GH12771 & GH12868 index = PeriodIndex(start='2000', periods=0, freq='D', name='idx') s = Series(index=index) - expected_index = PeriodIndex([], name='idx', freq='M') - expected = Series(index=expected_index) + for freq in ['M', 'D', 'H']: + expected_index = PeriodIndex([], name='idx', freq=freq) + expected = Series(index=expected_index) - for method in resample_methods: - result = getattr(s.resample('M'), method)() - assert_series_equal(result, expected) + for method in resample_methods: + result = getattr(s.resample(freq), method)() + assert_series_equal(result, expected) + self.assertEqual(result.index.freq, freq) def test_resample_count(self):