pandas distinction between str and object types : <p>Numpy seems to make a distinction between <code>str</code> and <code>object</code> types.  For instance I can do ::</p>

<pre><code>&gt;&gt;&gt; import pandas as pd
&gt;&gt;&gt; import numpy as np
&gt;&gt;&gt; np.dtype(str)
dtype('S')
&gt;&gt;&gt; np.dtype(object)
dtype('O')
</code></pre>

<p>Where dtype('S') and dtype('O') corresponds to <code>str</code> and <code>object</code> respectively.</p>

<p>However pandas seem to lack that distinction and coerce <code>str</code> to <code>object</code>. ::</p>

<pre><code>&gt;&gt;&gt; df = pd.DataFrame({'a': np.arange(5)})
&gt;&gt;&gt; df.a.dtype
dtype('int64')
&gt;&gt;&gt; df.a.astype(str).dtype
dtype('O')
&gt;&gt;&gt; df.a.astype(object).dtype
dtype('O')
</code></pre>

<p>Forcing the type to <code>dtype('S')</code> does not help either. ::</p>

<pre><code>&gt;&gt;&gt; df.a.astype(np.dtype(str)).dtype
dtype('O')
&gt;&gt;&gt; df.a.astype(np.dtype('S')).dtype
dtype('O')
</code></pre>

<p>Is there any explanation for this behavior? </p>
