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_float为True,但这并没有解决它。
当我逐行执行时,它会起作用:
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?
更新大熊猫到较新的版本(与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.