It seems there is an issue when adding a timedelta to a Series of type datetime64[ns, some tz]. There seems to be an issue with the offset/DST.

Code Sample, a copy-pastable example if possible

import pandas

sr = pandas.Series(pandas.DatetimeIndex(["2016-11-03 16:00:00+01:00", "2016-10-25 17:00:00+02:00"]).tz_localize("UTC").tz_convert(tz="Europe/Brussels"))
print(sr)
print(sr + pandas.to_timedelta(0, unit='h'))

Actual Output

0   2016-11-03 16:00:00+01:00
1   2016-10-25 17:00:00+02:00
dtype: datetime64[ns, Europe/Brussels]
0   2016-11-03 16:00:00+01:00
1   2016-10-25 16:00:00+02:00
dtype: datetime64[ns, Europe/Brussels]

Expected Output

0   2016-11-03 16:00:00+01:00
1   2016-10-25 17:00:00+02:00
dtype: datetime64[ns, Europe/Brussels]
0   2016-11-03 16:00:00+01:00
1   2016-10-25 17:00:00+02:00
dtype: datetime64[ns, Europe/Brussels]

output of pd.show_versions()

INSTALLED VERSIONS

commit: None python: 3.5.2.final.0 python-bits: 32 OS: Windows OS-release: 7 machine: AMD64 processor: Intel64 Family 6 Model 61 Stepping 4, GenuineIntel byteorder: little LC_ALL: None LANG: None

pandas: 0.18.1 nose: None pip: 8.1.2 setuptools: 23.0.0 Cython: None numpy: 1.11.0 scipy: 0.17.1 statsmodels: None xarray: None IPython: 4.2.0 sphinx: None patsy: None dateutil: 2.5.3 pytz: 2016.4 blosc: None bottleneck: None tables: None numexpr: 2.6.1 matplotlib: 1.5.1 openpyxl: 2.3.2 xlrd: 1.0.0 xlwt: None xlsxwriter: 0.9.2 lxml: 3.6.0 bs4: None html5lib: None httplib2: 0.9.2 apiclient: None sqlalchemy: 1.0.12 pymysql: None psycopg2: 2.6.2 (dt dec pq3 ext) jinja2: 2.8 boto: None pandas_datareader: None

Comment From: jreback

dupe of #13905

Comment From: sdementen

I have the impression it is not exactly the same bug. It appears specifically when - DST is active for the given date (there is no bug for 2016-11-03 16:00:00+01:00 as DST is not active for this time). If I adapt the example to match the case from #13905, I have no issue:

import pandas
sr =  pandas.Series(pandas.DatetimeIndex(['2016-06-28 05:30', '2016-06-28 05:31'], type='datetime64[ns, America/Chicago]'))
print(sr)
print((sr + pandas.to_timedelta(0, unit='h')))

gives

0   2016-06-28 05:30:00-05:00
1   2016-06-28 05:31:00-05:00
dtype: datetime64[ns, America/Chicago]
0   2016-06-28 05:30:00-05:00
1   2016-06-28 05:31:00-05:00
dtype: datetime64[ns, America/Chicago]

  • adding the timedelta to a Series (and not an index). If we use a DateTimeIndex instead of a Series
sr =  pandas.DatetimeIndex(["2016-12-03 16:00:00", "2016-10-25 17:00:00"], dtype='datetime64[ns, Europe/Brussels]')
print(sr)
print((sr + pandas.to_timedelta(0, unit='h')))

it works as expected

DatetimeIndex(['2016-12-03 16:00:00+01:00', '2016-10-25 17:00:00+02:00'], dtype='datetime64[ns, Europe/Brussels]', freq=None)
DatetimeIndex(['2016-12-03 16:00:00+01:00', '2016-10-25 17:00:00+02:00'], dtype='datetime64[ns, Europe/Brussels]', freq=None)