<p dir="auto">While it's possible to find the <code class="notranslate">max</code> of a Series containing strings, it's not possible to find the <code class="notranslate">idxmax</code>:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="&gt;&gt;&gt; s = pd.Series(list('ABCDEFGHIJKLMNOPQRSTUVWXYZ'))
&gt;&gt;&gt; s.max()
'Z'

&gt;&gt;&gt; s.idxmax()
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
&lt;ipython-input-292-28e0d79e56be&gt; in &lt;module&gt;()
----&gt; 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         &quot;&quot;&quot;
-&gt; 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     &quot;&quot;&quot;
    493     values, mask, dtype, _ = _get_values(values, skipna, fill_value_typ='-inf',
--&gt; 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:
--&gt; 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)
--&gt; 223     return ~np.isfinite(values.astype('float64'))
    224 
    225 

ValueError: could not convert string to float: 'Z'"><pre class="notranslate"><code class="notranslate">&gt;&gt;&gt; s = pd.Series(list('ABCDEFGHIJKLMNOPQRSTUVWXYZ'))
&gt;&gt;&gt; s.max()
'Z'

&gt;&gt;&gt; s.idxmax()
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
&lt;ipython-input-292-28e0d79e56be&gt; in &lt;module&gt;()
----&gt; 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         """
-&gt; 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',
--&gt; 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:
--&gt; 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)
--&gt; 223     return ~np.isfinite(values.astype('float64'))
    224 
    225 

ValueError: could not convert string to float: 'Z'
</code></pre></div>
<p dir="auto">This surprised me because it works without a problem in numpy:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="&gt;&gt;&gt; arr = np.array(list('ABCDEFGHIJKLMNOPQRSTUVWXYZ'))
&gt;&gt;&gt; arr.argmax()
25"><pre class="notranslate"><code class="notranslate">&gt;&gt;&gt; arr = np.array(list('ABCDEFGHIJKLMNOPQRSTUVWXYZ'))
&gt;&gt;&gt; arr.argmax()
25
</code></pre></div>
<p dir="auto">It seems that pandas <code class="notranslate">idxmax</code> implementation implicitly assumes numerical types.</p>
<p dir="auto">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].<br>
When returning a single column with dtype=datetime64[ns,UTC] or returning a multiple columns of dtype=datetime64[ns] (ie without tz), it works.<br>
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]).</p>
<h4 dir="auto">Code Sample, a copy-pastable example if possible</h4>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="import pandas

idx = pandas.date_range(&quot;2010&quot;, &quot;2011&quot;, tz=&quot;UTC&quot;)
df = pandas.DataFrame(index=idx)
df[&quot;A&quot;] = idx
df[&quot;B&quot;] = idx
print(df[[&quot;B&quot;]].values.dtype)
print(df[[&quot;A&quot;, &quot;B&quot;]].values.dtype)"><pre class="notranslate"><code class="notranslate">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)
</code></pre></div>
<h4 dir="auto">Actual Output</h4>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="datetime64[ns, UTC]
object"><pre class="notranslate"><code class="notranslate">datetime64[ns, UTC]
object
</code></pre></div>
<h4 dir="auto">Expected Output</h4>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="datetime64[ns, UTC]
datetime64[ns, UTC]"><pre class="notranslate"><code class="notranslate">datetime64[ns, UTC]
datetime64[ns, UTC]
</code></pre></div>
<h4 dir="auto">output of <code class="notranslate">pd.show_versions()</code></h4>
<p dir="auto">INSTALLED VERSIONS</p>
<p dir="auto">commit: None<br>
python: 3.5.2.final.0<br>
python-bits: 32<br>
OS: Windows<br>
OS-release: 7<br>
machine: AMD64<br>
processor: Intel64 Family 6 Model 61 Stepping 4, GenuineIntel<br>
byteorder: little<br>
LC_ALL: None<br>
LANG: None</p>
<p dir="auto">pandas: 0.18.1<br>
nose: None<br>
pip: 8.1.2<br>
setuptools: 23.0.0<br>
Cython: None<br>
numpy: 1.11.0<br>
scipy: 0.17.1<br>
statsmodels: None<br>
xarray: None<br>
IPython: 4.2.0<br>
sphinx: None<br>
patsy: None<br>
dateutil: 2.5.3<br>
pytz: 2016.4<br>
blosc: None<br>
bottleneck: None<br>
tables: None<br>
numexpr: 2.6.1<br>
matplotlib: 1.5.1<br>
openpyxl: 2.3.2<br>
xlrd: 1.0.0<br>
xlwt: None<br>
xlsxwriter: 0.9.2<br>
lxml: 3.6.0<br>
bs4: None<br>
html5lib: None<br>
httplib2: 0.9.2<br>
apiclient: None<br>
sqlalchemy: 1.0.12<br>
pymysql: None<br>
psycopg2: 2.6.2 (dt dec pq3 ext)<br>
jinja2: 2.8<br>
boto: None<br>
pandas_datareader: None</p>