@@ -119,7 +119,8 @@ def _format_dates(self):
119
119
self .obj [c ] = self ._format_to_date (self .obj [c ])
120
120
121
121
def read_json (path_or_buf = None , orient = None , typ = 'frame' , dtype = True ,
122
- convert_axes = True , convert_dates = True , keep_default_dates = True , numpy = False ):
122
+ convert_axes = True , convert_dates = True , keep_default_dates = True ,
123
+ numpy = False , precise_float = False ):
123
124
"""
124
125
Convert JSON string to pandas object
125
126
@@ -187,7 +188,9 @@ def read_json(path_or_buf=None, orient=None, typ='frame', dtype=True,
187
188
188
189
class Parser (object ):
189
190
190
- def __init__ (self , json , orient , dtype = True , convert_axes = True , convert_dates = True , keep_default_dates = False , numpy = False ):
191
+ def __init__ (self , json , orient , dtype = True , convert_axes = True ,
192
+ convert_dates = True , keep_default_dates = False , numpy = False ,
193
+ precise_float = False ):
191
194
self .json = json
192
195
193
196
if orient is None :
@@ -200,6 +203,7 @@ def __init__(self, json, orient, dtype=True, convert_axes=True, convert_dates=Tr
200
203
numpy = False
201
204
202
205
self .numpy = numpy
206
+ self .precise_float = precise_float
203
207
self .convert_axes = convert_axes
204
208
self .convert_dates = convert_dates
205
209
self .keep_default_dates = keep_default_dates
@@ -347,24 +351,30 @@ def _parse_no_numpy(self):
347
351
orient = self .orient
348
352
if orient == "split" :
349
353
decoded = dict ((str (k ), v )
350
- for k , v in loads (json ).iteritems ())
354
+ for k , v in loads (
355
+ json ,
356
+ precise_float = self .precise_float ).iteritems ())
351
357
self .obj = Series (dtype = None , ** decoded )
352
358
else :
353
- self .obj = Series (loads (json ), dtype = None )
359
+ self .obj = Series (
360
+ loads (json , precise_float = self .precise_float ), dtype = None )
354
361
355
362
def _parse_numpy (self ):
356
363
357
364
json = self .json
358
365
orient = self .orient
359
366
if orient == "split" :
360
- decoded = loads (json , dtype = None , numpy = True )
367
+ decoded = loads (json , dtype = None , numpy = True ,
368
+ precise_float = self .precise_float )
361
369
decoded = dict ((str (k ), v ) for k , v in decoded .iteritems ())
362
370
self .obj = Series (** decoded )
363
371
elif orient == "columns" or orient == "index" :
364
372
self .obj = Series (* loads (json , dtype = None , numpy = True ,
365
- labelled = True ))
373
+ labelled = True ,
374
+ precise_float = self .precise_float ))
366
375
else :
367
- self .obj = Series (loads (json , dtype = None , numpy = True ))
376
+ self .obj = Series (loads (json , dtype = None , numpy = True ,
377
+ precise_float = self .precise_float ))
368
378
369
379
def _try_convert_types (self ):
370
380
if self .obj is None : return
@@ -381,34 +391,43 @@ def _parse_numpy(self):
381
391
orient = self .orient
382
392
383
393
if orient == "columns" :
384
- args = loads (json , dtype = None , numpy = True , labelled = True )
394
+ args = loads (json , dtype = None , numpy = True , labelled = True ,
395
+ precise_float = self .precise_float )
385
396
if args :
386
397
args = (args [0 ].T , args [2 ], args [1 ])
387
398
self .obj = DataFrame (* args )
388
399
elif orient == "split" :
389
- decoded = loads (json , dtype = None , numpy = True )
400
+ decoded = loads (json , dtype = None , numpy = True ,
401
+ precise_float = self .precise_float )
390
402
decoded = dict ((str (k ), v ) for k , v in decoded .iteritems ())
391
403
self .obj = DataFrame (** decoded )
392
404
elif orient == "values" :
393
- self .obj = DataFrame (loads (json , dtype = None , numpy = True ))
405
+ self .obj = DataFrame (loads (json , dtype = None , numpy = True ,
406
+ precise_float = self .precise_float ))
394
407
else :
395
- self .obj = DataFrame (* loads (json , dtype = None , numpy = True , labelled = True ))
408
+ self .obj = DataFrame (* loads (json , dtype = None , numpy = True , labelled = True ,
409
+ precise_float = self .precise_float ))
396
410
397
411
def _parse_no_numpy (self ):
398
412
399
413
json = self .json
400
414
orient = self .orient
401
415
402
416
if orient == "columns" :
403
- self .obj = DataFrame (loads (json ), dtype = None )
417
+ self .obj = DataFrame (
418
+ loads (json , precise_float = self .precise_float ), dtype = None )
404
419
elif orient == "split" :
405
420
decoded = dict ((str (k ), v )
406
- for k , v in loads (json ).iteritems ())
421
+ for k , v in loads (
422
+ json ,
423
+ precise_float = self .precise_float ).iteritems ())
407
424
self .obj = DataFrame (dtype = None , ** decoded )
408
425
elif orient == "index" :
409
- self .obj = DataFrame (loads (json ), dtype = None ).T
426
+ self .obj = DataFrame (
427
+ loads (json , precise_float = self .precise_float ), dtype = None ).T
410
428
else :
411
- self .obj = DataFrame (loads (json ), dtype = None )
429
+ self .obj = DataFrame (
430
+ loads (json , precise_float = self .precise_float ), dtype = None )
412
431
413
432
def _try_convert_types (self ):
414
433
if self .obj is None : return
0 commit comments