我正在尝试将以下 JSON 读入 DataFrame:
[{"col1": 900000000000000000000}]
当我运行 pd.read_json('sample.json')
时收到错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.6/site-packages/pandas/io/json/json.py", line 366, in read_json
return json_reader.read()
File "/usr/lib/python3.6/site-packages/pandas/io/json/json.py", line 467, in read
obj = self._get_object_parser(self.data)
File "/usr/lib/python3.6/site-packages/pandas/io/json/json.py", line 484, in _get_object_parser
obj = FrameParser(json, **kwargs).parse()
File "/usr/lib/python3.6/site-packages/pandas/io/json/json.py", line 576, in parse
self._parse_no_numpy()
File "/usr/lib/python3.6/site-packages/pandas/io/json/json.py", line 793, in _parse_no_numpy
loads(json, precise_float=self.precise_float), dtype=None)
ValueError: Value is too big
我尝试了几种不同的方法来定义读取时的数据类型,例如:
df = pd.read_json('sample.json', dtype={'col1': np.dtype('object')})
df = pd.read_json('sample.json', dtype={'col1': np.object})
df = pd.read_json('sample.json', dtype={'col1': str})
有趣的是,如果我将输入更改为以下内容,它在 dtype 设置为 float64 时工作正常:[{"col1": "900000000000000000000"}]
;但不幸的是,这不是我的输入。
知道为什么我无法在读取时正确定义数据类型吗?谢谢。
最佳答案
首先,使用 json.loads
并加载所有没有问题的数据(在本例中,除了 col1
之外的所有数据)。
import json
json_data = '''[{"col1": 900000000000000000000, "col2": "abc"}, {....}]'''
data = json.loads(json_data)
c = list(set(data[0].keys()) - {'col1'})
df = pd.DataFrame.from_records(data, columns=c)
现在,我们必须手动提取 col1
的数据,将其转换为 dtype=object
Series
,然后添加
df.insert(0, 'col1', pd.Series([d['col1'] for d in data], dtype=object))
df
col1 col2
0 900000000000000000000 abc
关于python - 如何在 read_json 上定义数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48245677/