<h4 dir="auto">A small, complete example of the issue</h4>
<p dir="auto">Apologies if this is already a known issue: I've not found anything similar in my googling, but my google-fu may have let me down.</p>
<p dir="auto">When adding a single time delta to a time column with non-naive TZs, in pandas 0.19.0 this produces an array which still has the correct timezone. However, if adding an array of time deltas, the timezone is dropped and a dtype of &lt;M8 is returned.</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Your code here
import pandas as pd

df = pd.DataFrame(pd.date_range(start=pd.Timestamp('2016-01-01 00:00:00+00'), end=pd.Timestamp('2016-01-01 23:59:59+00'), freq='H'))
df.columns = ['a']
df.a.dtype # Both 0.19.0 and 0.18.1 here return datetime64[ns, UTC]
df.a # Here, the +00 is visible.

df['b'] = df['a'].subtract(pd.Timedelta(seconds=60*60))
df['b'].dtype # Here, 0.18.1 returns dtype('&lt;M8[ns]'), while 0.19.0 returns datetime64[ns, UTC]
df.b # Here, 0.19.0 will display the +00 while 0.18.1 will drop the TZ alteration

df['c'] = df['a'].subtract(df['b'] - df['a']) # Here, pandas 0.18.1 Fails due to trying to subtract a known timezone from a timezone-naive datetime.

df.c.dtype # Here, 0.19.0 returns dtype('&lt;M8[ns]')
df.c # Here, 0.19.0 will not show the +00 TZ alteration."><pre class="notranslate"><span class="pl-c"># Your code here</span>
<span class="pl-k">import</span> <span class="pl-s1">pandas</span> <span class="pl-k">as</span> <span class="pl-s1">pd</span>

<span class="pl-s1">df</span> <span class="pl-c1">=</span> <span class="pl-s1">pd</span>.<span class="pl-v">DataFrame</span>(<span class="pl-s1">pd</span>.<span class="pl-en">date_range</span>(<span class="pl-s1">start</span><span class="pl-c1">=</span><span class="pl-s1">pd</span>.<span class="pl-v">Timestamp</span>(<span class="pl-s">'2016-01-01 00:00:00+00'</span>), <span class="pl-s1">end</span><span class="pl-c1">=</span><span class="pl-s1">pd</span>.<span class="pl-v">Timestamp</span>(<span class="pl-s">'2016-01-01 23:59:59+00'</span>), <span class="pl-s1">freq</span><span class="pl-c1">=</span><span class="pl-s">'H'</span>))
<span class="pl-s1">df</span>.<span class="pl-s1">columns</span> <span class="pl-c1">=</span> [<span class="pl-s">'a'</span>]
<span class="pl-s1">df</span>.<span class="pl-s1">a</span>.<span class="pl-s1">dtype</span> <span class="pl-c"># Both 0.19.0 and 0.18.1 here return datetime64[ns, UTC]</span>
<span class="pl-s1">df</span>.<span class="pl-s1">a</span> <span class="pl-c"># Here, the +00 is visible.</span>

<span class="pl-s1">df</span>[<span class="pl-s">'b'</span>] <span class="pl-c1">=</span> <span class="pl-s1">df</span>[<span class="pl-s">'a'</span>].<span class="pl-en">subtract</span>(<span class="pl-s1">pd</span>.<span class="pl-v">Timedelta</span>(<span class="pl-s1">seconds</span><span class="pl-c1">=</span><span class="pl-c1">60</span><span class="pl-c1">*</span><span class="pl-c1">60</span>))
<span class="pl-s1">df</span>[<span class="pl-s">'b'</span>].<span class="pl-s1">dtype</span> <span class="pl-c"># Here, 0.18.1 returns dtype('&lt;M8[ns]'), while 0.19.0 returns datetime64[ns, UTC]</span>
<span class="pl-s1">df</span>.<span class="pl-s1">b</span> <span class="pl-c"># Here, 0.19.0 will display the +00 while 0.18.1 will drop the TZ alteration</span>

<span class="pl-s1">df</span>[<span class="pl-s">'c'</span>] <span class="pl-c1">=</span> <span class="pl-s1">df</span>[<span class="pl-s">'a'</span>].<span class="pl-en">subtract</span>(<span class="pl-s1">df</span>[<span class="pl-s">'b'</span>] <span class="pl-c1">-</span> <span class="pl-s1">df</span>[<span class="pl-s">'a'</span>]) <span class="pl-c"># Here, pandas 0.18.1 Fails due to trying to subtract a known timezone from a timezone-naive datetime.</span>

<span class="pl-s1">df</span>.<span class="pl-s1">c</span>.<span class="pl-s1">dtype</span> <span class="pl-c"># Here, 0.19.0 returns dtype('&lt;M8[ns]')</span>
<span class="pl-s1">df</span>.<span class="pl-s1">c</span> <span class="pl-c"># Here, 0.19.0 will not show the +00 TZ alteration.</span></pre></div>
<h4 dir="auto">Expected Output</h4>
<p dir="auto">I am not sure what the expected output should be. From my point of view, subtracting a Timedelta from a TZ specific timestamp should maintain the TZ. This is what appears to have happened between version 0.18.1 and 0.19.0 for single time deltas. However, I also think that the behaviour between the two cases above (single timedeltas and series of timedeltas) should be consistent.</p>
<p dir="auto">Please clarify if I've understood this correctly!</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="&gt;&gt; df.a.dtype
 datetime64[ns, UTC]
&gt;&gt; df.a
0    2016-01-01 00:00:00+00:00
1    2016-01-01 01:00:00+00:00
2    2016-01-01 02:00:00+00:00
3    2016-01-01 03:00:00+00:00
4    2016-01-01 04:00:00+00:00
5    2016-01-01 05:00:00+00:00
6    2016-01-01 06:00:00+00:00
7    2016-01-01 07:00:00+00:00
8    2016-01-01 08:00:00+00:00
9    2016-01-01 09:00:00+00:00
10   2016-01-01 10:00:00+00:00
11   2016-01-01 11:00:00+00:00
12   2016-01-01 12:00:00+00:00
13   2016-01-01 13:00:00+00:00
14   2016-01-01 14:00:00+00:00
15   2016-01-01 15:00:00+00:00
16   2016-01-01 16:00:00+00:00
17   2016-01-01 17:00:00+00:00
18   2016-01-01 18:00:00+00:00
19   2016-01-01 19:00:00+00:00
20   2016-01-01 20:00:00+00:00
21   2016-01-01 21:00:00+00:00
22   2016-01-01 22:00:00+00:00
23   2016-01-01 23:00:00+00:00
Name: a, dtype: datetime64[ns, UTC]

&gt;&gt; df.b.dtype
datetime64[ns, UTC]
&gt;&gt; df.b
0    2015-12-31 23:00:00+00:00
1    2016-01-01 00:00:00+00:00
2    2016-01-01 01:00:00+00:00
3    2016-01-01 02:00:00+00:00
4    2016-01-01 03:00:00+00:00
5    2016-01-01 04:00:00+00:00
6    2016-01-01 05:00:00+00:00
7    2016-01-01 06:00:00+00:00
8    2016-01-01 07:00:00+00:00
9    2016-01-01 08:00:00+00:00
10   2016-01-01 09:00:00+00:00
11   2016-01-01 10:00:00+00:00
12   2016-01-01 11:00:00+00:00
13   2016-01-01 12:00:00+00:00
14   2016-01-01 13:00:00+00:00
15   2016-01-01 14:00:00+00:00
16   2016-01-01 15:00:00+00:00
17   2016-01-01 16:00:00+00:00
18   2016-01-01 17:00:00+00:00
19   2016-01-01 18:00:00+00:00
20   2016-01-01 19:00:00+00:00
21   2016-01-01 20:00:00+00:00
22   2016-01-01 21:00:00+00:00
23   2016-01-01 22:00:00+00:00
Name: b, dtype: datetime64[ns, UTC]

&gt;&gt; df.c.dtype
datetime64[ns, UTC]
&gt;&gt; df.c
0    2016-01-01 01:00:00+00
1    2016-01-01 02:00:00+00
2    2016-01-01 03:00:00+00
3    2016-01-01 04:00:00+00
4    2016-01-01 05:00:00+00
5    2016-01-01 06:00:00+00
6    2016-01-01 07:00:00+00
7    2016-01-01 08:00:00+00
8    2016-01-01 09:00:00+00
9    2016-01-01 10:00:00+00
10   2016-01-01 11:00:00+00
11   2016-01-01 12:00:00+00
12   2016-01-01 13:00:00+00
13   2016-01-01 14:00:00+00
14   2016-01-01 15:00:00+00
15   2016-01-01 16:00:00+00
16   2016-01-01 17:00:00+00
17   2016-01-01 18:00:00+00
18   2016-01-01 19:00:00+00
19   2016-01-01 20:00:00+00
20   2016-01-01 21:00:00+00
21   2016-01-01 22:00:00+00
22   2016-01-01 23:00:00+00
23   2016-01-02 00:00:00+00
Name: c, dtype: datetime64[ns, UTC]"><pre class="notranslate"><code class="notranslate">&gt;&gt; df.a.dtype
 datetime64[ns, UTC]
&gt;&gt; df.a
0    2016-01-01 00:00:00+00:00
1    2016-01-01 01:00:00+00:00
2    2016-01-01 02:00:00+00:00
3    2016-01-01 03:00:00+00:00
4    2016-01-01 04:00:00+00:00
5    2016-01-01 05:00:00+00:00
6    2016-01-01 06:00:00+00:00
7    2016-01-01 07:00:00+00:00
8    2016-01-01 08:00:00+00:00
9    2016-01-01 09:00:00+00:00
10   2016-01-01 10:00:00+00:00
11   2016-01-01 11:00:00+00:00
12   2016-01-01 12:00:00+00:00
13   2016-01-01 13:00:00+00:00
14   2016-01-01 14:00:00+00:00
15   2016-01-01 15:00:00+00:00
16   2016-01-01 16:00:00+00:00
17   2016-01-01 17:00:00+00:00
18   2016-01-01 18:00:00+00:00
19   2016-01-01 19:00:00+00:00
20   2016-01-01 20:00:00+00:00
21   2016-01-01 21:00:00+00:00
22   2016-01-01 22:00:00+00:00
23   2016-01-01 23:00:00+00:00
Name: a, dtype: datetime64[ns, UTC]

&gt;&gt; df.b.dtype
datetime64[ns, UTC]
&gt;&gt; df.b
0    2015-12-31 23:00:00+00:00
1    2016-01-01 00:00:00+00:00
2    2016-01-01 01:00:00+00:00
3    2016-01-01 02:00:00+00:00
4    2016-01-01 03:00:00+00:00
5    2016-01-01 04:00:00+00:00
6    2016-01-01 05:00:00+00:00
7    2016-01-01 06:00:00+00:00
8    2016-01-01 07:00:00+00:00
9    2016-01-01 08:00:00+00:00
10   2016-01-01 09:00:00+00:00
11   2016-01-01 10:00:00+00:00
12   2016-01-01 11:00:00+00:00
13   2016-01-01 12:00:00+00:00
14   2016-01-01 13:00:00+00:00
15   2016-01-01 14:00:00+00:00
16   2016-01-01 15:00:00+00:00
17   2016-01-01 16:00:00+00:00
18   2016-01-01 17:00:00+00:00
19   2016-01-01 18:00:00+00:00
20   2016-01-01 19:00:00+00:00
21   2016-01-01 20:00:00+00:00
22   2016-01-01 21:00:00+00:00
23   2016-01-01 22:00:00+00:00
Name: b, dtype: datetime64[ns, UTC]

&gt;&gt; df.c.dtype
datetime64[ns, UTC]
&gt;&gt; df.c
0    2016-01-01 01:00:00+00
1    2016-01-01 02:00:00+00
2    2016-01-01 03:00:00+00
3    2016-01-01 04:00:00+00
4    2016-01-01 05:00:00+00
5    2016-01-01 06:00:00+00
6    2016-01-01 07:00:00+00
7    2016-01-01 08:00:00+00
8    2016-01-01 09:00:00+00
9    2016-01-01 10:00:00+00
10   2016-01-01 11:00:00+00
11   2016-01-01 12:00:00+00
12   2016-01-01 13:00:00+00
13   2016-01-01 14:00:00+00
14   2016-01-01 15:00:00+00
15   2016-01-01 16:00:00+00
16   2016-01-01 17:00:00+00
17   2016-01-01 18:00:00+00
18   2016-01-01 19:00:00+00
19   2016-01-01 20:00:00+00
20   2016-01-01 21:00:00+00
21   2016-01-01 22:00:00+00
22   2016-01-01 23:00:00+00
23   2016-01-02 00:00:00+00
Name: c, dtype: datetime64[ns, UTC]
</code></pre></div>
<h4 dir="auto">Output of <code class="notranslate">pd.show_versions()</code></h4>
<p dir="auto">(I have tested in two virtualenvs, the only difference between the two being the python version)</p>
<details>
# Paste the output here
## INSTALLED VERSIONS
<p dir="auto">commit: None<br>
python: 2.7.10.final.0<br>
python-bits: 64<br>
OS: Darwin<br>
OS-release: 14.5.0<br>
machine: x86_64<br>
processor: i386<br>
byteorder: little<br>
LC_ALL: None<br>
LANG: en_GB.UTF-8<br>
LOCALE: None.None</p>
<p dir="auto">pandas: 0.19.0<br>
nose: 1.3.7<br>
pip: 8.1.2<br>
setuptools: 28.6.0<br>
Cython: None<br>
numpy: 1.11.2<br>
scipy: None<br>
statsmodels: None<br>
xarray: None<br>
IPython: None<br>
sphinx: None<br>
patsy: None<br>
dateutil: 2.5.3<br>
pytz: 2016.7<br>
blosc: None<br>
bottleneck: None<br>
tables: None<br>
numexpr: None<br>
matplotlib: None<br>
openpyxl: None<br>
xlrd: None<br>
xlwt: None<br>
xlsxwriter: None<br>
lxml: None<br>
bs4: None<br>
html5lib: None<br>
httplib2: None<br>
apiclient: None<br>
sqlalchemy: None<br>
pymysql: None<br>
psycopg2: None<br>
jinja2: None<br>
boto: None<br>
pandas_datareader: None</p>
</details>
<p dir="auto">When I add a time delta to a DatetimeIndex which is tz-aware, the results appear as UTC, but sometimes claim to be in the original non-UTC timezone.</p>
<h4 dir="auto">Code</h4>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="import pandas as pd
index = pd.DatetimeIndex(['2016-06-28 05:30', '2016-06-28 05:31'], dtype='datetime64[ns, America/Chicago]')
offset = pd.Series(['00:00:05', '00:00:05'], dtype='timedelta64[ns]', index=index)
print(index + offset)
print(index + offset.values)"><pre class="notranslate"><code class="notranslate">import pandas as pd
index = pd.DatetimeIndex(['2016-06-28 05:30', '2016-06-28 05:31'], dtype='datetime64[ns, America/Chicago]')
offset = pd.Series(['00:00:05', '00:00:05'], dtype='timedelta64[ns]', index=index)
print(index + offset)
print(index + offset.values)
</code></pre></div>
<h4 dir="auto">Actual Output</h4>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="2016-06-28 05:30:00-05:00   2016-06-28 10:30:05
2016-06-28 05:31:00-05:00   2016-06-28 10:31:05
dtype: datetime64[ns]
DatetimeIndex(['2016-06-28 10:30:05-05:00', '2016-06-28 10:31:05-05:00'], dtype='datetime64[ns, America/Chicago]', freq=None)"><pre class="notranslate"><code class="notranslate">2016-06-28 05:30:00-05:00   2016-06-28 10:30:05
2016-06-28 05:31:00-05:00   2016-06-28 10:31:05
dtype: datetime64[ns]
DatetimeIndex(['2016-06-28 10:30:05-05:00', '2016-06-28 10:31:05-05:00'], dtype='datetime64[ns, America/Chicago]', freq=None)
</code></pre></div>
<h4 dir="auto">Expected Output</h4>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="2016-06-28 05:30:00-05:00   2016-06-28 05:30:05-05:00
2016-06-28 05:31:00-05:00   2016-06-28 05:31:05-05:00
dtype: datetime64[ns]
DatetimeIndex(['2016-06-28 05:30:05-05:00', '2016-06-28 05:31:05-05:00'], dtype='datetime64[ns, America/Chicago]', freq=None)"><pre class="notranslate"><code class="notranslate">2016-06-28 05:30:00-05:00   2016-06-28 05:30:05-05:00
2016-06-28 05:31:00-05:00   2016-06-28 05:31:05-05:00
dtype: datetime64[ns]
DatetimeIndex(['2016-06-28 05:30:05-05:00', '2016-06-28 05:31:05-05:00'], dtype='datetime64[ns, America/Chicago]', freq=None)
</code></pre></div>
<p dir="auto">Note however that this does print the expected result:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="print(index + pd.to_timedelta('00:00:05'))"><pre class="notranslate"><code class="notranslate">print(index + pd.to_timedelta('00:00:05'))
</code></pre></div>
<p dir="auto">I'm using Pandas 0.18.1.</p>