title: How to convert columns to number quickly without know the NA value patterns
body: <p>I have many CSV files with the same column titles to parse. In these files, there maybe several patterns to represent NA, for example: "-", "--", "/", ...</p>
  
  <p>I don't know all the patterns, so I can't set <code>na_values</code> argument for <code>read_csv()</code> correctly.</p>
  
  <p>Are there any quick way to find all NA patterns in those files, or without know all the patterns, I can still convert all the columns to number? Here is what I tried:</p>
  
  <pre><code>patterns = set()
  for i, fn in enumerate(glob(u"data/*.csv")):
      df = pd.read_csv(fn, encoding="utf-8-sig", usecols=cols, dtype=str, keep_default_na=False)
      df_num = df.convert_objects(convert_numeric=True)
      patterns.update( df[df_num.isnull()].stack().value_counts().index )
  </code></pre>
  
  <p>But <code>convert_objects()</code> is slow. Here is some test:</p>
  
  <ul>
  <li><code>read_csv(dtype=str)</code>: about 2.2s</li>
  <li><code>read_csv()</code> without <code>dtype</code> argument: about 2.5s</li>
  <li><code>read_csv(dtype=str)</code> + <code>convert_objects()</code>: 8.4s</li>
  </ul>
  
  <p>So, <code>read_csv()</code> can convert strings to numbers very quickly than <code>convert_objects()</code>. But if there is one element that can't be converted to number, the whole column will become a string column.</p>
  
  <p>Are there any faster method that can convert all columns to number without set <code>na_values</code> argument?</p>