将熊猫数据帧导出到JSON时如何解决OverflowError

时间:2019-02-13 20:11:26

标签: python json pandas dataframe jupyter

在Jupyter中,我有一个40万个对象的数据框,在不遇到以下错误的情况下,我无法将其完全导出到JSON文件中。

只要我将导出限制为前141 000个对象,无论这些第一个对象的顺序如何,导出的效果都很好。

我应该知道处理大型JSON文件的任何大小限制吗? 谢谢。

OverflowError                             Traceback (most recent call last)
<ipython-input-254-b59373f1eeb2> in <module>
----> 1 df4.to_json('test.json', orient = 'records')

~/anaconda3/lib/python3.7/site-packages/pandas/core/generic.py in to_json(self, path_or_buf, orient, date_format, double_precision, force_ascii, date_unit, default_handler, lines, compression, index)
   1889                             default_handler=default_handler,
   1890                             lines=lines, compression=compression,
-> 1891                             index=index)
   1892 
   1893     def to_hdf(self, path_or_buf, key, **kwargs):

~/anaconda3/lib/python3.7/site-packages/pandas/io/json/json.py in to_json(path_or_buf, obj, orient, date_format, double_precision, force_ascii, date_unit, default_handler, lines, compression, index)
     56         double_precision=double_precision, ensure_ascii=force_ascii,
     57         date_unit=date_unit, default_handler=default_handler,
---> 58         index=index).write()
     59 
     60     if lines:

~/anaconda3/lib/python3.7/site-packages/pandas/io/json/json.py in write(self)
     99         return self._write(self.obj, self.orient, self.double_precision,
    100                            self.ensure_ascii, self.date_unit,
--> 101                            self.date_format == 'iso', self.default_handler)
    102 
    103     def _write(self, obj, orient, double_precision, ensure_ascii,

~/anaconda3/lib/python3.7/site-packages/pandas/io/json/json.py in _write(self, obj, orient, double_precision, ensure_ascii, date_unit, iso_dates, default_handler)
    154                                                double_precision,
    155                                                ensure_ascii, date_unit,
--> 156                                                iso_dates, default_handler)
    157 
    158 

~/anaconda3/lib/python3.7/site-packages/pandas/io/json/json.py in _write(self, obj, orient, double_precision, ensure_ascii, date_unit, iso_dates, default_handler)
    110             date_unit=date_unit,
    111             iso_dates=iso_dates,
--> 112             default_handler=default_handler
    113         )
    114 

OverflowError: int too big to convert

2 个答案:

答案 0 :(得分:2)

JSON中的数据大小没有固有的限制,所以这不是您的问题:该消息表明使用特定的整数值会遇到一些困难。

这凸显了处理如此大文件的困难,因为您现在必须在to_json调用过程中隔离导致问题的特定记录。

由于您大致知道问题出在哪里,您可以尝试将二等分技术中的数据框子集转换为导致问题的行。

答案 1 :(得分:0)

尝试以下代码:

 df4.to_json('test.json',default_handler=str, orient = 'records')
如果无法将对象转换为 JSON 的合适格式,则使用

default_handler

阅读documentation