title: Strings in a DataFrame, but dtype is object
body: <p>Why does Pandas tell me that I have objects, although every item in the selected column is a string — even after explicit conversion.</p>
  
  <p>This is my DataFrame:</p>
  
  <pre><code>&lt;class 'pandas.core.frame.DataFrame'&gt;
  Int64Index: 56992 entries, 0 to 56991
  Data columns (total 7 columns):
  id            56992  non-null values
  attr1         56992  non-null values
  attr2         56992  non-null values
  attr3         56992  non-null values
  attr4         56992  non-null values
  attr5         56992  non-null values
  attr6         56992  non-null values
  dtypes: int64(2), object(5)
  </code></pre>
  
  <p>Five of them are <code>dtype object</code>. I explicitly convert those objects to strings:</p>
  
  <pre><code>for c in df.columns:
      if df[c].dtype == object:
          print "convert ", df[c].name, " to string"
          df[c] = df[c].astype(str)
  </code></pre>
  
  <p>Then, <code>df["attr2"]</code> still has <code>dtype object</code>, although <code>type(df["attr2"].ix[0]</code> reveals <code>str</code>, which is correct.</p>
  
  <p>Pandas distinguishes between <code>int64</code> and <code>float64</code> and <code>object</code>. What is the logic behind it when there is no <code>dtype str</code>? Why is a <code>str</code> covered by <code>object</code>?</p>