Issue 1:
A small, complete example of the issue

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.

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 <M8 is returned.

# 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('<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('<M8[ns]')
df.c # Here, 0.19.0 will not show the +00 TZ alteration.

Expected Output

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.

Please clarify if I've understood this correctly!

>> df.a.dtype
datetime64[ns, UTC]
>> 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]

>> df.b.dtype
datetime64[ns, UTC]
>> 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]

>> df.c.dtype
datetime64[ns, UTC]
>> 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]

Output of pd.show_versions()

(I have tested in two virtualenvs, the only difference between the two being the python version)

# Paste the output here
## INSTALLED VERSIONS

commit: None

python: 2.7.10.final.0

python-bits: 64

OS: Darwin

OS-release: 14.5.0

machine: x86_64

processor: i386

byteorder: little

LC_ALL: None

LANG: en_GB.UTF-8

LOCALE: None.None

pandas: 0.19.0

nose: 1.3.7

pip: 8.1.2

setuptools: 28.6.0

Cython: None

numpy: 1.11.2

scipy: None

statsmodels: None

xarray: None

IPython: None

sphinx: None

patsy: None

dateutil: 2.5.3

pytz: 2016.7

blosc: None

bottleneck: None

tables: None

numexpr: None

matplotlib: None

openpyxl: None

xlrd: None

xlwt: None

xlsxwriter: None

lxml: None

bs4: None

html5lib: None

httplib2: None

apiclient: None

sqlalchemy: None

pymysql: None

psycopg2: None

jinja2: None

boto: None

pandas_datareader: None

Issue 2:
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.

Code

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)

Actual Output

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)

Expected Output

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)

Note however that this does print the expected result:

print(index + pd.to_timedelta('00:00:05'))

I'm using Pandas 0.18.1.