python - 如何在 read_json 上定义数据类型?

标签 python json pandas

我正在尝试将以下 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/

相关文章:

security - JSON 响应周围的注释 block

mysql - 将现有的 MySQL 列更改为 JSON 数据类型

python - Pandas 根据索引与多个系列相交

python - 将数据帧从 Pandas 转换为 pyspark 到 Foundry 的数据类型

python - Mongoengine Flask 获取 dbstats

Python使用配置文件创建Windows exe来传递用户名和密码

javascript - VueJS + Electron 创建 debian 安装程序不起作用(electron-installer-debian)

python - 多个嵌套列表与 pandas 的排列

Python 用 'numpy.ndarray' 创建一个字典

python - 是否存在用于读取行然后拆分它们的快速 Python 内置方法?