Issue 1:
This doesn't work:

a = pd.DataFrame(data=np.random.rand(3))
time = pd.date_range('2000-01-01', tz='UTC', periods=3, freq='10ms', name='time')
a['time'] = time
b = pd.DataFrame(data=np.random.rand(3))
c = pd.concat([a, b])

It produces a type error:

/usr/lib/python3.6/site-packages/pandas/core/indexes/api.py:87: RuntimeWarning: '<' not supported between instances of 'str' and 'int', sort order is undefined for incomparable objects
result = result.union(other)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-22-f0e01a86e895> in <module>()
----> 1 c = pd.concat([a, b])

/usr/lib/python3.6/site-packages/pandas/core/reshape/concat.py in concat(objs, axis, join, join_axes, ignore_index, keys, levels, names, verify_integrity, copy)
211 verify_integrity=verify_integrity,
212 copy=copy)
--> 213 return op.get_result()
214
215

/usr/lib/python3.6/site-packages/pandas/core/reshape/concat.py in get_result(self)
406 new_data = concatenate_block_managers(
407 mgrs_indexers, self.new_axes, concat_axis=self.axis,
--> 408 copy=self.copy)
409 if not self.copy:
410 new_data._consolidate_inplace()

/usr/lib/python3.6/site-packages/pandas/core/internals.py in concatenate_block_managers(mgrs_indexers, axes, concat_axis, copy)
5196 else:
5197 b = make_block(
-> 5198 concatenate_join_units(join_units, concat_axis, copy=copy),
5199 placement=placement)
5200 blocks.append(b)

/usr/lib/python3.6/site-packages/pandas/core/internals.py in concatenate_join_units(join_units, concat_axis, copy)
5325 to_concat = [ju.get_reindexed_values(empty_dtype=empty_dtype,
5326 upcasted_na=upcasted_na)
-> 5327 for ju in join_units]
5328
5329 if len(to_concat) == 1:

/usr/lib/python3.6/site-packages/pandas/core/internals.py in <listcomp>(.0)
5325 to_concat = [ju.get_reindexed_values(empty_dtype=empty_dtype,
5326 upcasted_na=upcasted_na)
-> 5327 for ju in join_units]
5328
5329 if len(to_concat) == 1:

/usr/lib/python3.6/site-packages/pandas/core/internals.py in get_reindexed_values(self, empty_dtype, upcasted_na)
5596 pass
5597 else:
-> 5598 missing_arr = np.empty(self.shape, dtype=empty_dtype)
5599 missing_arr.fill(fill_value)
5600 return missing_arr

TypeError: data type not understood
> /usr/lib/python3.6/site-packages/pandas/core/internals.py(5598)get_reindexed_values()
5596 pass
5597 else:
-> 5598 missing_arr = np.empty(self.shape, dtype=empty_dtype)
5599 missing_arr.fill(fill_value)
5600 return missing_arr

Problem description

When concatenating dataframes, of which one contains a column with datetime64[ns, UTC], the process fails. This currently breaks my workflow, and I'd like to stick with timezone aware times...

It works with plain datetime64[ns].:

a['time'] = pd.date_range('2000-01-01', tz=None, periods=3, freq='10ms', name='time'
pd.concat([a, b])

and produces the expected output:

/usr/lib/python3.6/site-packages/pandas/core/indexes/api.py:87: RuntimeWarning: '<' not supported between instances of 'str' and 'int', sort order is undefined for incomparable objects
result = result.union(other)
Out[35]:
0 time
0 0.071325 2000-01-01 00:00:00.000
1 0.485844 2000-01-01 00:00:00.010
2 0.247131 2000-01-01 00:00:00.020
0 0.595540 NaT
1 0.609389 NaT
2 0.850834 NaT

Expected Output

Similar to the result with plain numpy datetime64, pd.concat() should simply fill in the missing time values with NaT.

Thanks and regards

Output of pd.show_versions()

INSTALLED VERSIONS
------------------
commit: None
python: 3.6.3.final.0
python-bits: 64
OS: Linux
OS-release: 4.13.12-1-ARCH
machine: x86_64
processor:
byteorder: little
LC_ALL: None
LANG: de_DE.utf8
LOCALE: de_DE.UTF-8

pandas: 0.21.0

pytest: 3.3.0

pip: 9.0.1

setuptools: 38.2.3

Cython: 0.27.3

numpy: 1.13.3

scipy: 1.0.0

pyarrow: None

xarray: 0.10.0

IPython: 6.2.1

sphinx: 1.6.5

patsy: None

dateutil: 2.6.1

pytz: 2017.3

blosc: None

bottleneck: 1.2.1

tables: 3.4.2

numexpr: 2.6.4

feather: None

matplotlib: 2.1.0

openpyxl: None

xlrd: None

xlwt: None

xlsxwriter: None

lxml: None

bs4: None

html5lib: 0.999999999

sqlalchemy: 1.1.15

pymysql: None

psycopg2: None

jinja2: 2.10

s3fs: 0.0.9

fastparquet: None

pandas_gbq: None

pandas_datareader: 0.5.0

Issue 2:
Concatenating DFs that have columns with all NaTs and TZ-aware ones breaks as of 0.17.1:

In [1]: import pandas as pd
In [2]: df1 = pd.DataFrame([[pd.NaT], [pd.NaT]])
In [3]: df1
Out[2]:
0
0 NaT
1 NaT
In [4]: df2 = pd.DataFrame([[pd.Timestamp('2015/01/01', tz='UTC')], [pd.Timestamp('2016/01/01', tz='UTC')]])
In [5]: df2
Out[4]:
0
0 2015-01-01 00:00:00+00:00
1 2016-01-01 00:00:00+00:00
In [6]: pd.concat([df1, df2])

---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-6-f61a1ab4009e> in <module>()
----> 1 pd.concat([df1, df2])

/.../env/local/lib/python2.7/site-packages/pandas/tools/merge.py in concat(objs, axis, join, join_axes, ignore_index, keys, levels, names, verify_integrity, copy)
811 verify_integrity=verify_integrity,
812 copy=copy)
--> 813 return op.get_result()
814
815

/.../env/local/lib/python2.7/site-packages/pandas/tools/merge.py in get_result(self)
993
994 new_data = concatenate_block_managers(
--> 995 mgrs_indexers, self.new_axes, concat_axis=self.axis, copy=self.copy)
996 if not self.copy:
997 new_data._consolidate_inplace()

/.../env/local/lib/python2.7/site-packages/pandas/core/internals.py in concatenate_block_managers(mgrs_indexers, axes, concat_axis, copy)
4454 copy=copy),
4455 placement=placement)
-> 4456 for placement, join_units in concat_plan]
4457
4458 return BlockManager(blocks, axes)

/.../env/local/lib/python2.7/site-packages/pandas/core/internals.py in concatenate_join_units(join_units, concat_axis, copy)
4551 to_concat = [ju.get_reindexed_values(empty_dtype=empty_dtype,
4552 upcasted_na=upcasted_na)
-> 4553 for ju in join_units]
4554
4555 if len(to_concat) == 1:

/.../env/local/lib/python2.7/site-packages/pandas/core/internals.py in get_reindexed_values(self, empty_dtype, upcasted_na)
4799
4800 if self.is_null and not getattr(self.block,'is_categorical',None):
-> 4801 missing_arr = np.empty(self.shape, dtype=empty_dtype)
4802 if np.prod(self.shape):
4803 # NumPy 1.6 workaround: this statement gets strange if all

TypeError: data type not understood

Possibly related to #11693, #11705 and the #11456 family. However, this doesn't appear to be caused by the TZ-aware vs. non-TZ aware problems referenced there.

Versions:

In [4]: pd.show_versions()

INSTALLED VERSIONS
------------------
commit: None
python: 2.7.6.final.0
python-bits: 64
OS: Linux
OS-release: 3.13.0-77-generic
machine: x86_64
processor: x86_64
byteorder: little
LC_ALL: None
LANG: en_US.UTF-8

pandas: 0.17.1
nose: 1.3.6
pip: 6.0.8
setuptools: 12.0.5
Cython: 0.22
numpy: 1.9.2
scipy: 0.15.1
statsmodels: 0.6.1.post1
IPython: 3.1.0
sphinx: 1.3.1
patsy: 0.2.1
dateutil: 2.4.2
pytz: 2015.4
blosc: 1.2.8
bottleneck: 1.0.0
tables: 3.2.0
numexpr: 2.4.3
matplotlib: None
openpyxl: None
xlrd: 0.9.3
xlwt: 0.7.5
xlsxwriter: None
lxml: None
bs4: None
html5lib: None
httplib2: None
apiclient: None
sqlalchemy: None
pymysql: None
psycopg2: None
Jinja2: None