Code Sample, a copy-pastable example if possible

import pandas as pd
import numpy as np
pd.DataFrame({'one' : pd.Series(["NULL", "1", "0"])}).to_csv("test.txt")
print pd.read_csv("test.txt", usecols=(1, ), dtype={'one': np.bool}, false_values=['0', 'NULL'], true_values=['1'])

Output:

     one
0    NaN
1   True
2  False

Expected Output

     one
0  False
1   True
2  False

output of pd.show_versions()

INSTALLED VERSIONS
------------------
commit: None
python: 2.7.11.final.0
python-bits: 32
OS: Windows
OS-release: 10
machine: AMD64
processor: Intel64 Family 6 Model 61 Stepping 4, GenuineIntel
byteorder: little
LC_ALL: None
LANG: None

pandas: 0.17.1
nose: 1.3.7
pip: 7.1.2
setuptools: 19.1.1
Cython: 0.23.4
numpy: 1.10.1
scipy: 0.16.0
statsmodels: None
IPython: 4.0.1
sphinx: 1.3.1
patsy: 0.4.0
dateutil: 2.4.2
pytz: 2015.7
blosc: None
bottleneck: 1.0.0
tables: 3.2.2
numexpr: 2.4.4
matplotlib: 1.5.0
openpyxl: 2.2.6
xlrd: 0.9.4
xlwt: 1.0.0
xlsxwriter: 0.7.7
lxml: 3.3.5
bs4: 4.4.1
html5lib: 0.999
httplib2: None
apiclient: None
sqlalchemy: 1.0.9
pymysql: None
psycopg2: None
Jinja2: None

Comment From: jorisvandenbossche

That is because 'NULL' is already a default value to be converted to NaN, and apparantly this has precedence over the true/false_values. You can disable the default NaN parsing with keep_default_na=False:

from StringIO import StringIO

s = """one
NULL
1
0"""
In [7]: pd.read_csv(StringIO(s), dtype={'one': np.bool}, false_values=['0', 'NULL'],
                    true_values=['1'], keep_default_na=False)
Out[7]:
     one
0  False
1   True
2  False

Comment From: dreamflasher

Thank you, solved!