diff --git a/pandas/core/frame.py b/pandas/core/frame.py index f09f9cb6fc72b..392fad952d5a7 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -35,6 +35,7 @@ from pandas.util.decorators import deprecate, Appender, Substitution from pandas.tseries.period import PeriodIndex +from pandas.tseries.index import DatetimeIndex import pandas.core.algorithms as algos import pandas.core.datetools as datetools @@ -2813,6 +2814,9 @@ def _maybe_cast(values): name = tuple(name_lst) if isinstance(self.index, PeriodIndex): values = self.index.asobject + elif (isinstance(self.index, DatetimeIndex) and + self.index.tz is not None): + values = self.index.asobject else: values = self.index.values new_obj.insert(0, name, _maybe_cast(values)) diff --git a/pandas/tseries/tests/test_timezones.py b/pandas/tseries/tests/test_timezones.py index 120a1414b9851..432122f372e45 100644 --- a/pandas/tseries/tests/test_timezones.py +++ b/pandas/tseries/tests/test_timezones.py @@ -529,6 +529,14 @@ def test_frame_from_records_utc(self): # it works DataFrame.from_records([rec], index='begin_time') + def test_frame_reset_index(self): + dr = date_range('2012-06-02', periods=10, tz='US/Eastern') + df = DataFrame(np.random.randn(len(dr)), dr) + roundtripped = df.reset_index().set_index('index') + xp = df.index.tz + rs = roundtripped.index.tz + self.assertEquals(xp, rs) + def test_dateutil_tzoffset_support(self): from dateutil.tz import tzoffset values = [188.5, 328.25] diff --git a/vb_suite/timeseries.py b/vb_suite/timeseries.py index 7f3c022f45f63..863fdf47e4f22 100644 --- a/vb_suite/timeseries.py +++ b/vb_suite/timeseries.py @@ -175,3 +175,19 @@ def date_range(start=None, end=None, periods=None, freq=None): datetimeindex_normalize = \ Benchmark('rng.normalize()', setup, start_date=datetime(2012, 9, 1)) + +setup = common_setup + """ +rng = date_range('1/1/2000', periods=100000, freq='H') +df = DataFrame(np.random.randn(len(rng), 2), rng) +""" + +dti_reset_index = \ + Benchmark('df.reset_index()', setup, start_date=datetime(2012,9,1)) + +setup = common_setup + """ +rng = date_range('1/1/2000', periods=100000, freq='H') +df = DataFrame(np.random.randn(len(rng), 2), rng, tz='US/Eastern') +""" + +dti_reset_index_tz = \ + Benchmark('df.reset_index()', setup, start_date=datetime(2012,9,1))