Skip to content

Commit 8625aae

Browse files
changhiskhanwesm
authored andcommitted
BUG: DataFrame.reset_index loses timezone information
1 parent 5f51c80 commit 8625aae

File tree

3 files changed

+28
-0
lines changed

3 files changed

+28
-0
lines changed

pandas/core/frame.py

+4
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
from pandas.util.decorators import deprecate, Appender, Substitution
3636

3737
from pandas.tseries.period import PeriodIndex
38+
from pandas.tseries.index import DatetimeIndex
3839

3940
import pandas.core.algorithms as algos
4041
import pandas.core.datetools as datetools
@@ -2813,6 +2814,9 @@ def _maybe_cast(values):
28132814
name = tuple(name_lst)
28142815
if isinstance(self.index, PeriodIndex):
28152816
values = self.index.asobject
2817+
elif (isinstance(self.index, DatetimeIndex) and
2818+
self.index.tz is not None):
2819+
values = self.index.asobject
28162820
else:
28172821
values = self.index.values
28182822
new_obj.insert(0, name, _maybe_cast(values))

pandas/tseries/tests/test_timezones.py

+8
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,14 @@ def test_frame_from_records_utc(self):
529529
# it works
530530
DataFrame.from_records([rec], index='begin_time')
531531

532+
def test_frame_reset_index(self):
533+
dr = date_range('2012-06-02', periods=10, tz='US/Eastern')
534+
df = DataFrame(np.random.randn(len(dr)), dr)
535+
roundtripped = df.reset_index().set_index('index')
536+
xp = df.index.tz
537+
rs = roundtripped.index.tz
538+
self.assertEquals(xp, rs)
539+
532540
def test_dateutil_tzoffset_support(self):
533541
from dateutil.tz import tzoffset
534542
values = [188.5, 328.25]

vb_suite/timeseries.py

+16
Original file line numberDiff line numberDiff line change
@@ -188,3 +188,19 @@ def date_range(start=None, end=None, periods=None, freq=None):
188188

189189
dti_append_tz = \
190190
Benchmark('s1.append(slst)', setup, start_date=datetime(2012, 9 ,1))
191+
192+
setup = common_setup + """
193+
rng = date_range('1/1/2000', periods=100000, freq='H')
194+
df = DataFrame(np.random.randn(len(rng), 2), rng)
195+
"""
196+
197+
dti_reset_index = \
198+
Benchmark('df.reset_index()', setup, start_date=datetime(2012,9,1))
199+
200+
setup = common_setup + """
201+
rng = date_range('1/1/2000', periods=100000, freq='H')
202+
df = DataFrame(np.random.randn(len(rng), 2), rng, tz='US/Eastern')
203+
"""
204+
205+
dti_reset_index_tz = \
206+
Benchmark('df.reset_index()', setup, start_date=datetime(2012,9,1))

0 commit comments

Comments
 (0)