具有 int64 值的 Pandas read_json 引发 ValueError:值太大

use*_*780 2 python json pandas

我正在尝试将 json 文件读入数据帧。

df = pd.read_json('test.log', lines=True)
Run Code Online (Sandbox Code Playgroud)

然而,有些值是 int64 和 Pandas 引发的:

ValueError: Value is too big
Run Code Online (Sandbox Code Playgroud)

我尝试设置precise_floatTrue,但这并没有解决它。

当我逐行执行时,它会起作用:

df = pd.DataFrame()
with open('test.log') as f:
    for line in f:
        data = json.loads(line)
        df = df.append(data, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

然而,这是非常缓慢的。对于大约 50k 行的文件,它需要很长时间。

有没有办法可以将某些列的值设置为使用 int64?

Mar*_*cel 5

更新大熊猫到较新的版本(与1.0.3测试)后,这种解决方法通过 artdgn可应用于覆盖loads()在功能pandas.io.json._json,其中当最终用于pd.read_json()被调用。

如果上面的链接停止工作,请复制解决方法:


import pandas as pd

# monkeypatch using standard python json module

import json

pd.io.json._json.loads = lambda s, *a, **kw: json.loads(s)

# monkeypatch using faster simplejson module
import simplejson
pd.io.json._json.loads = lambda s, *a, **kw: simplejson.loads(s)

# normalising (unnesting) at the same time (for nested jsons)
pd.io.json._json.loads = lambda s, *a, **kw: pandas.json_normalize(simplejson.loads(s))
Run Code Online (Sandbox Code Playgroud)

loads()artdgn描述的 3 种方法中的一种覆盖函数后,read_json()也适用于int64.

  • 我使用的是 0.24.1 版本,但删除了它并安装了 1.0.3,现在可以使用了。仅添加了大约 55 个额外列,其中包含 NaN 值。但只要稍微清理一下,它就能工作并快速加载数据。谢谢。 (2认同)