Issue 1:
When trying to reindex with an index with duplicate values, I get the error message ValueError: Shape of passed values is (1, 20), indices imply (1, 10), while I expected somthing like Reindexing only valid with uniquely valued Index objects

I see this with both 0.12 and master.

An example:

In [2]: pd.__version__
Out[2]: '0.12.0-274-gc472099'

In [3]: s = pd.DataFrame(np.random.randn(10), index=[1,2,3,4,5,1,2,3,4,5])

In [4]: s
Out[4]:
0
1 -0.067753
2 -1.544545
3 0.726160
4 0.562298
5 -0.094550
1 0.753334
2 -0.893318
3 -0.275085
4 2.645206
5 -0.926170

In [5]: s.reindex(index=range(len(s)))

---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-6-2085c8b16fe3> in <module>()
----> 1 s.reindex(index=range(len(s)))

c:\users\vdbosscj\scipy\pandas-joris\pandas\core\generic.pyc in reindex(self, *args, **kwargs)
1085
1086 # perform the reindex on the axes
-> 1087 return self._reindex_axes(axes, level, limit, method, fill_value, copy, takeable=takeable)._propogate_attributes(self)
1088
1089 def _reindex_axes(self, axes, level, limit, method, fill_value, copy, takeable=False):

c:\users\vdbosscj\scipy\pandas-joris\pandas\core\frame.pyc in _reindex_axes(self, axes, level, limit, method, fill_value, copy, takeable)
2268 if index is not None:
2269 frame = frame._reindex_index(index, method, copy, level,
-> 2270 fill_value, limit, takeable=takeable)
2271
2272 return frame

c:\users\vdbosscj\scipy\pandas-joris\pandas\core\frame.pyc in _reindex_index(self, new_index, method, copy, level, fill_value, limit, takeable)
2278 takeable=takeable)
2279 return self._reindex_with_indexers({0: [new_index, indexer]},
-> 2280 copy=copy, fill_value=fill_value)
2281
2282 def _reindex_columns(self, new_columns, copy, level, fill_value=NA,

c:\users\vdbosscj\scipy\pandas-joris\pandas\core\generic.pyc in _reindex_with_indexers(self, reindexers, method, fill_value, limit, copy)
1184 indexer = com._ensure_int64(indexer)
1185 new_data = new_data.reindex_indexer(index, indexer, axis=baxis,
-> 1186 fill_value=fill_value)
1187
1188 elif baxis == 0 and index is not None and index is not new_data.axes[baxis]:

c:\users\vdbosscj\scipy\pandas-joris\pandas\core\internals.pyc in reindex_indexer(self, new_axis, indexer, axis, fill_value)
2673 new_axes = list(self.axes)
2674 new_axes[axis] = new_axis
-> 2675 return self.__class__(new_blocks, new_axes)
2676
2677 def _reindex_indexer_items(self, new_items, indexer, fill_value):

c:\users\vdbosscj\scipy\pandas-joris\pandas\core\internals.pyc in __init__(self, blocks, axes, do_integrity_check, fastpath)
1563
1564 if do_integrity_check:
-> 1565 self._verify_integrity()
1566
1567 self._has_sparse = False

c:\users\vdbosscj\scipy\pandas-joris\pandas\core\internals.pyc in _verify_integrity(self)
1826 if not block.is_sparse and block.values.shape[1:] != mgr_shape[1:]:
1827 construction_error(
-> 1828 tot_items, block.values.shape[1:], self.axes)
1829 if len(self.items) != tot_items:
1830 raise AssertionError('Number of manager items must equal union of '

c:\users\vdbosscj\scipy\pandas-joris\pandas\core\internals.pyc in construction_error(tot_items, block_shape, axes)
3063 raise ValueError("Shape of passed values is %s, indices imply %s" % (
3064 tuple(map(int, [tot_items] + list(block_shape))),
-> 3065 tuple(map(int, [len(ax) for ax in axes]))))
3066
3067

ValueError: Shape of passed values is (1, 15), indices imply (1, 10)

In [6]: s.reindex(index=s.index.order())

---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-5-2ce611a93f5d> in <module>()
----> 1 s.reindex(index=s.index.order())

.....

c:\users\vdbosscj\scipy\pandas-joris\pandas\core\internals.py in construction_error(tot_items, block_shape, axes)
3063 raise ValueError("Shape of passed values is %s, indices imply %s" % (
3064 tuple(map(int, [tot_items] + list(block_shape))),
-> 3065 tuple(map(int, [len(ax) for ax in axes]))))
3066
3067

ValueError: Shape of passed values is (1, 20), indices imply (1, 10)

Issue 2:
Code Sample, a copy-pastable example if possible

In [1]: import pandas as pd
...:
...: def check_roundtrip(obj):
...: with pd.HDFStore('test.h5', 'w') as store:
...: store['obj'] = obj
...: retrieved = store['obj']
...: return obj.equals(retrieved)
...:
...: s = pd.Series([], dtype='datetime64[ns, UTC]')
...: t = pd.Series([0], dtype='datetime64[ns, UTC]')
...: df = pd.DataFrame({'A': s})

In [2]: print(check_roundtrip(s))
False

In [3]: print(check_roundtrip(t))
False

In [4]: print(check_roundtrip(df))

------------------------------------------------------------------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-57f1e9853bf6> in <module>()
----> 1 print(check_roundtrip(df))

<ipython-input-1-1d7fb84453e9> in check_roundtrip(obj)
4 with pd.HDFStore('test.h5', 'w') as store:
5 store['obj'] = obj
----> 6 retrieved = store['obj']
7 return obj.equals(retrieved)
8

/home/ashieh/.local/lib/python2.7/site-packages/pandas/io/pytables.pyc in __getitem__(self, key)
481
482 def __getitem__(self, key):
--> 483 return self.get(key)
484
485 def __setitem__(self, key, value):

/home/ashieh/.local/lib/python2.7/site-packages/pandas/io/pytables.pyc in get(self, key)
669 if group is None:
670 raise KeyError('No object named %s in the file' % key)
--> 671 return self._read_group(group)
672
673 def select(self, key, where=None, start=None, stop=None, columns=None,

/home/ashieh/.local/lib/python2.7/site-packages/pandas/io/pytables.pyc in _read_group(self, group, **kwargs)
1347 s = self._create_storer(group)
1348 s.infer_axes()
-> 1349 return s.read(**kwargs)
1350
1351

/home/ashieh/.local/lib/python2.7/site-packages/pandas/io/pytables.pyc in read(self, start, stop, **kwargs)
2902 blk_items = self.read_index('block%d_items' % i)
2903 values = self.read_array('block%d_values' % i,
-> 2904 start=_start, stop=_stop)
2905 blk = make_block(values,
2906 placement=items.get_indexer(blk_items))

/home/ashieh/.local/lib/python2.7/site-packages/pandas/io/pytables.pyc in read_array(self, key, start, stop)
2464 if shape is not None:
2465 # length 0 axis
-> 2466 ret = np.empty(shape, dtype=dtype)
2467 else:
2468 ret = node[start:stop]

TypeError: Invalid datetime unit in metadata string "[ns, UTC]"

Problem description

HDFStore fails to save empty/non-empty Series and empty DataFrames with timezone-aware data correctly. The issue is that the timezone information is not being saved correctly. For Series, there is no timezone handling at all. For DataFrames, the timezone handling is skipped when empty.

Expected Output

The checks should pass.

Output of pd.show_versions()

INSTALLED VERSIONS

commit: None

python: 2.7.12.final.0

python-bits: 64

OS: Linux

OS-release: 4.4.0-1049-aws

machine: x86_64

processor: x86_64

byteorder: little

LC_ALL: None

LANG: en_US.UTF-8

LOCALE: None.None

pandas: 0.22.0

pytest: 3.5.0

pip: 9.0.3

setuptools: 39.0.1

Cython: 0.28.1

numpy: 1.14.2

scipy: 1.0.1

pyarrow: 0.9.0

xarray: None

IPython: 5.6.0

sphinx: None

patsy: None

dateutil: 2.7.2

pytz: 2018.3

blosc: None

bottleneck: None

tables: 3.4.2

numexpr: 2.6.4

feather: None

matplotlib: 2.2.2

openpyxl: None

xlrd: None

xlwt: None

xlsxwriter: None

lxml: None

bs4: None

html5lib: 1.0.1

sqlalchemy: None

pymysql: 0.8.0

psycopg2: None

jinja2: 2.10

s3fs: None

fastparquet: None

pandas_gbq: None

pandas_datareader: None