title: Pandas reading NULL as a NaN float instead of str
body: <p>Given the file:</p>
  
  <pre><code>$ cat test.csv 
  a,b,c,NULL,d
  e,f,g,h,i
  j,k,l,m,n
  </code></pre>
  
  <p>Where the 3rd column is to be treated as <code>str</code>.</p>
  
  <p>When I did a string function on the column, <code>pandas</code> has read the <code>NULL</code> str as a <code>NaN</code> float:</p>
  
  <pre><code>&gt;&gt;&gt; import pandas as pd
  &gt;&gt;&gt; df = pd.read_csv('test.csv', names=[0,1,2,3,4], dtype={0:str, 1:str, 2:str, 3:str, 4:str})
  
  &gt;&gt;&gt; df[3].apply(str.strip)
  Traceback (most recent call last):
    File "&lt;stdin&gt;", line 1, in &lt;module&gt;
    File "/usr/local/lib/python3.5/site-packages/pandas/core/series.py", line 2355, in apply
      mapped = lib.map_infer(values, f, convert=convert_dtype)
    File "pandas/_libs/src/inference.pyx", line 1569, in pandas._libs.lib.map_infer (pandas/_libs/lib.c:66440)
  TypeError: descriptor 'strip' requires a 'str' object but received a 'float'
  </code></pre>
  
  <p>To verify:</p>
  
  <pre><code>&gt;&gt;&gt; for i in df[3]:
  ...    print (type(i), i)
  ... 
  &lt;class 'float'&gt; nan
  &lt;class 'str'&gt; h
  &lt;class 'str'&gt; m
  </code></pre>
  
  <p>I've specified the <code>dtype</code> at initialization but somehow it got overriden. </p>
  
  <p><strong>How do I force the type of a specific column to be fixed?</strong></p>
  
  <p><strong>Is there a way of automatically finding these abnormal <code>NaN</code> floats and change then back to <code>'NULL'</code> string?</strong> </p>