@@ -54,6 +54,9 @@ class DateConversionError(Exception):
54
54
na_values : list-like or dict, default None
55
55
Additional strings to recognize as NA/NaN. If dict passed, specific
56
56
per-column NA values
57
+ keep_default_na : bool, default True
58
+ If na_values are specified and keep_default_na is False the default NaN
59
+ values are overridden, otherwise they're appended to
57
60
parse_dates : boolean, list of ints or names, list of lists, or dict
58
61
True -> try parsing all columns
59
62
[1, 2, 3] -> try parsing columns 1, 2, 3 each as a separate date column
@@ -199,6 +202,7 @@ def read_csv(filepath_or_buffer,
199
202
names = None ,
200
203
skiprows = None ,
201
204
na_values = None ,
205
+ keep_default_na = True ,
202
206
thousands = None ,
203
207
comment = None ,
204
208
parse_dates = False ,
@@ -218,7 +222,8 @@ def read_csv(filepath_or_buffer,
218
222
sep = sep , dialect = dialect ,
219
223
header = header , index_col = index_col ,
220
224
names = names , skiprows = skiprows ,
221
- na_values = na_values , thousands = thousands ,
225
+ na_values = na_values , keep_default_na = keep_default_na ,
226
+ thousands = thousands ,
222
227
comment = comment , parse_dates = parse_dates ,
223
228
keep_date_col = keep_date_col ,
224
229
dayfirst = dayfirst , date_parser = date_parser ,
@@ -244,6 +249,7 @@ def read_table(filepath_or_buffer,
244
249
names = None ,
245
250
skiprows = None ,
246
251
na_values = None ,
252
+ keep_default_na = True ,
247
253
thousands = None ,
248
254
comment = None ,
249
255
parse_dates = False ,
@@ -263,7 +269,8 @@ def read_table(filepath_or_buffer,
263
269
sep = sep , dialect = dialect ,
264
270
header = header , index_col = index_col ,
265
271
names = names , skiprows = skiprows ,
266
- na_values = na_values , thousands = thousands ,
272
+ na_values = na_values , keep_default_na = keep_default_na ,
273
+ thousands = thousands ,
267
274
comment = comment , parse_dates = parse_dates ,
268
275
keep_date_col = keep_date_col ,
269
276
dayfirst = dayfirst , date_parser = date_parser ,
@@ -292,6 +299,7 @@ def read_fwf(filepath_or_buffer,
292
299
names = None ,
293
300
skiprows = None ,
294
301
na_values = None ,
302
+ keep_default_na = True ,
295
303
thousands = None ,
296
304
comment = None ,
297
305
parse_dates = False ,
@@ -311,7 +319,8 @@ def read_fwf(filepath_or_buffer,
311
319
colspecs = colspecs , widths = widths ,
312
320
header = header , index_col = index_col ,
313
321
names = names , skiprows = skiprows ,
314
- na_values = na_values , thousands = thousands ,
322
+ na_values = na_values , keep_default_na = keep_default_na ,
323
+ thousands = thousands ,
315
324
comment = comment , parse_dates = parse_dates ,
316
325
keep_date_col = keep_date_col ,
317
326
dayfirst = dayfirst , date_parser = date_parser ,
@@ -407,6 +416,7 @@ class TextParser(object):
407
416
Column or columns to use as the (possibly hierarchical) index
408
417
na_values : iterable, default None
409
418
Custom NA values
419
+ keep_default_na : bool, default True
410
420
thousands : str, default None
411
421
Thousands separator
412
422
comment : str, default None
@@ -425,7 +435,8 @@ class TextParser(object):
425
435
"""
426
436
427
437
def __init__ (self , f , delimiter = None , dialect = None , names = None , header = 0 ,
428
- index_col = None , na_values = None , thousands = None ,
438
+ index_col = None , na_values = None , keep_default_na = True ,
439
+ thousands = None ,
429
440
comment = None , parse_dates = False , keep_date_col = False ,
430
441
date_parser = None , dayfirst = False ,
431
442
chunksize = None , skiprows = None , skip_footer = 0 , converters = None ,
@@ -467,12 +478,20 @@ def __init__(self, f, delimiter=None, dialect=None, names=None, header=0,
467
478
468
479
assert (self .skip_footer >= 0 )
469
480
470
- if na_values is None :
481
+ self .keep_default_na = keep_default_na
482
+ if na_values is None and keep_default_na :
471
483
self .na_values = _NA_VALUES
472
484
elif isinstance (na_values , dict ):
485
+ if keep_default_na :
486
+ for k , v in na_values .iteritems ():
487
+ v = set (list (v )) | _NA_VALUES
488
+ na_values [k ] = v
473
489
self .na_values = na_values
474
490
else :
475
- self .na_values = set (list (na_values )) | _NA_VALUES
491
+ na_values = set (list (na_values ))
492
+ if keep_default_na :
493
+ na_values = na_values | _NA_VALUES
494
+ self .na_values = na_values
476
495
477
496
self .thousands = thousands
478
497
self .comment = comment
0 commit comments