我想知道是否有一种以内存有效的方式将多记录JSON文件(每行是JSON dict)读入pandas数据帧.下面是一个带有工作解决方案的2行示例,我需要它可能用于非常大量的记录.示例用法是处理来自Hadoop Pig JSonStorage函数的输出.
import json
import pandas as pd
test='''{"a":1,"b":2}
{"a":3,"b":4}'''
#df=pd.read_json(test,orient='records') doesn't work, expects []
l=[ json.loads(l) for l in test.splitlines()]
df=pd.DataFrame(l)
Run Code Online (Sandbox Code Playgroud) 我有一个Json文件如下.这是一个dicts列表.
[{"city": "ab", "trips": 4, "date": "2014-01-25", "value": 4.7, "price": 1.1, "request_date": "2014-06-17", "medium": "iPhone", "%price": 15.4, "type": true, "Weekly_pct": 46.2, "avg_dist": 3.67, "avg_price": 5.0}, {"city": "bc", "trips": 0, "date": "2014-01-29", "value": 5.0, "price": 1.0, "request_date": "2014-05-05", "medium": "Android", "%price": 0.0, "type": false, "weekly_pct": 50.0, "avg_dist": 8.26, "avg_price": 5.0}.....]
Run Code Online (Sandbox Code Playgroud)
当我用这个读到这个:
data=pd.read_json('dataset.json')
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ValueError:预期的对象或值
我也试过这个:
from ast import literal_eval
with open('dataset.json') as f:
data = literal_eval(f.read())
df = pd.DataFrame(data)
Run Code Online (Sandbox Code Playgroud)
它给出以下错误:
ValueError:格式错误的字符串
编辑:
即使Json.loads也行不通.试过这个:
import json
data=json.loads('dataset.json')
Run Code Online (Sandbox Code Playgroud)
ValueError:无法解码JSON对象
Json文件是13.5MB,但它似乎有大量的数据.