title: dtype comparison: == and isin produce different results for "object"
body: <p>Minimal example:</p>
  
  <pre><code>df = pd.DataFrame({'x': ['a', 'b', 'c'], 'y': [1, 2, 3], 'z': ['d', 'e', 'f']})
  df
  
     x  y  z
  0  a  1  d
  1  b  2  e
  2  c  3  f
  
  df.dtypes
  
  x    object
  y     int64
  z    object
  dtype: object
  </code></pre>
  
  <p>The idea is to filter out columns which are of <code>object</code> type. I know this can be done using <code>select_dtypes</code>, the motivation behind this question is to examine the weird behaviour behind what I'm about to show you.</p>
  
  <p><code>==</code> (and as a consequence, <code>.eq</code>) work for comparing a specific type.</p>
  
  <pre><code>df.dtypes == object
  
  x     True
  y    False
  z     True
  dtype: bool
  </code></pre>
  
  <p>However, <code>isin</code> does not:</p>
  
  <pre><code>df.dtypes.isin([object])
  df.dtypes.isin(['object'])
  
  x    False
  y    False
  z    False
  dtype: bool
  </code></pre>
  
  <p>OTOH, creating a <code>np.dtype</code> object and passing that <em>does</em>.</p>
  
  <pre><code>df.dtypes.isin([np.dtype('O')])
  
  x     True
  y    False
  z     True
  dtype: bool
  </code></pre>
  
  <p><code>np.isin</code> works here, so there's no reason for this to behave any differently.</p>
  
  <pre><code>np.isin(df.dtypes, object)
  array([ True, False,  True])
  
  np.isin(df.dtypes, 'object')
  array([ True, False,  True])
  </code></pre>
  
  <p><code>isin</code> seems to be causing trouble when checking for object types only. <code>df.dtypes.isin(['int'])</code> gives the expected result. </p>
  
  <p>As a side note, I'm running these tests on 0.24.</p>
  
  <pre><code>pd.__version__
  '0.24.2'
  </code></pre>
  
  <p>Is this a bug, or expected behaviour?</p>