Issue 1:
While it's possible to find the max of a Series containing strings, it's not possible to find the idxmax:

>>> s = pd.Series(list('ABCDEFGHIJKLMNOPQRSTUVWXYZ'))
>>> s.max()
'Z'

>>> s.idxmax()
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-292-28e0d79e56be> in <module>()
----> 1 s.idxmax()

/Users/jakevdp/anaconda/envs/python3.4/lib/python3.4/site-packages/pandas/core/series.py in idxmax(self, axis, out, skipna)
1218 numpy.ndarray.argmax
1219 """
-> 1220 i = nanops.nanargmax(_values_from_object(self), skipna=skipna)
1221 if i == -1:
1222 return np.nan

/Users/jakevdp/anaconda/envs/python3.4/lib/python3.4/site-packages/pandas/core/nanops.py in nanargmax(values, axis, skipna)
492 """
493 values, mask, dtype, _ = _get_values(values, skipna, fill_value_typ='-inf',
--> 494 isfinite=True)
495 result = values.argmax(axis)
496 result = _maybe_arg_null_out(result, axis, mask, skipna)

/Users/jakevdp/anaconda/envs/python3.4/lib/python3.4/site-packages/pandas/core/nanops.py in _get_values(values, skipna, fill_value, fill_value_typ, isfinite, copy)
178 values = _values_from_object(values)
179 if isfinite:
--> 180 mask = _isfinite(values)
181 else:
182 mask = isnull(values)

/Users/jakevdp/anaconda/envs/python3.4/lib/python3.4/site-packages/pandas/core/nanops.py in _isfinite(values)
221 is_integer_dtype(values) or is_bool_dtype(values)):
222 return ~np.isfinite(values)
--> 223 return ~np.isfinite(values.astype('float64'))
224
225

ValueError: could not convert string to float: 'Z'

This surprised me because it works without a problem in numpy:

>>> arr = np.array(list('ABCDEFGHIJKLMNOPQRSTUVWXYZ'))
>>> arr.argmax()
25

It seems that pandas idxmax implementation implicitly assumes numerical types.

Issue 2:
When getting the values of a dataframe with multiple columns with a single type datetime64[ns,UTC], it returns a numpy array with dtype=object instead of dtype=datetime64[ns,UTC].

When returning a single column with dtype=datetime64[ns,UTC] or returning a multiple columns of dtype=datetime64[ns] (ie without tz), it works.

Looking at the code, it appears that SingleBlockManager.is_mixed_type returns False in the first case (datetime64[ns,UTC]) and True in the two other cases (single datetime64[ns,UTC] or multiple datetime64[ns]).

Code Sample, a copy-pastable example if possible

import pandas

idx = pandas.date_range("2010", "2011", tz="UTC")
df = pandas.DataFrame(index=idx)
df["A"] = idx
df["B"] = idx
print(df[["B"]].values.dtype)
print(df[["A", "B"]].values.dtype)

Actual Output

datetime64[ns, UTC]
object

Expected Output

datetime64[ns, UTC]
datetime64[ns, UTC]

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