@@ -119,7 +119,8 @@ def _format_dates(self):
119119 self .obj [c ] = self ._format_to_date (self .obj [c ])
120120
121121def 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 ):
123124 """
124125 Convert JSON string to pandas object
125126
@@ -187,7 +188,9 @@ def read_json(path_or_buf=None, orient=None, typ='frame', dtype=True,
187188
188189class Parser (object ):
189190
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 ):
191194 self .json = json
192195
193196 if orient is None :
@@ -200,6 +203,7 @@ def __init__(self, json, orient, dtype=True, convert_axes=True, convert_dates=Tr
200203 numpy = False
201204
202205 self .numpy = numpy
206+ self .precise_float = precise_float
203207 self .convert_axes = convert_axes
204208 self .convert_dates = convert_dates
205209 self .keep_default_dates = keep_default_dates
@@ -347,24 +351,30 @@ def _parse_no_numpy(self):
347351 orient = self .orient
348352 if orient == "split" :
349353 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 ())
351357 self .obj = Series (dtype = None , ** decoded )
352358 else :
353- self .obj = Series (loads (json ), dtype = None )
359+ self .obj = Series (
360+ loads (json , precise_float = self .precise_float ), dtype = None )
354361
355362 def _parse_numpy (self ):
356363
357364 json = self .json
358365 orient = self .orient
359366 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 )
361369 decoded = dict ((str (k ), v ) for k , v in decoded .iteritems ())
362370 self .obj = Series (** decoded )
363371 elif orient == "columns" or orient == "index" :
364372 self .obj = Series (* loads (json , dtype = None , numpy = True ,
365- labelled = True ))
373+ labelled = True ,
374+ precise_float = self .precise_float ))
366375 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 ))
368378
369379 def _try_convert_types (self ):
370380 if self .obj is None : return
@@ -381,34 +391,43 @@ def _parse_numpy(self):
381391 orient = self .orient
382392
383393 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 )
385396 if args :
386397 args = (args [0 ].T , args [2 ], args [1 ])
387398 self .obj = DataFrame (* args )
388399 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 )
390402 decoded = dict ((str (k ), v ) for k , v in decoded .iteritems ())
391403 self .obj = DataFrame (** decoded )
392404 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 ))
394407 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 ))
396410
397411 def _parse_no_numpy (self ):
398412
399413 json = self .json
400414 orient = self .orient
401415
402416 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 )
404419 elif orient == "split" :
405420 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 ())
407424 self .obj = DataFrame (dtype = None , ** decoded )
408425 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
410428 else :
411- self .obj = DataFrame (loads (json ), dtype = None )
429+ self .obj = DataFrame (
430+ loads (json , precise_float = self .precise_float ), dtype = None )
412431
413432 def _try_convert_types (self ):
414433 if self .obj is None : return
0 commit comments