我使用以下迭代方法成功地将数据从JSON文件(根据以下示例构建)转移到三列['tag', 'time', 'score']
DataFrame中:
for k, v in enumerate(my_request['content']):
for k1, v1 in enumerate(v['data']['score']):
df.loc[len(df)] = [v['tag_id'], v1['time'], v1['value']]
然而,虽然这最终实现了预期的结果,但是需要花费大量时间来迭代具有相同结构的较大文件。我假设迭代方法不是解决此类问题的理想方法。改为使用pandas.io.json.json_normalize
,我尝试了以下内容:
result = json_normalize(my_request, ['content'], ['data', 'score', ['time', 'value']])
返回KeyError: ("Try running with errors='ignore' as key %s is not always present", KeyError('data',))
。我相信我误解了json_normalize
上的pandas文档,并且无法弄清楚我应该如何传递参数。
有人能指出我正确的方向吗?
(或者使用 errors='ignore'
返回 ValueError: Conflicting metadata name data, need distinguishing prefix
。)
JSON结构
{
'content':[
{
'data':{
'score':[
{
'time':'2015-03-01 00:00:30',
'value':75.0
},
{
'time':'2015-03-01 23:50:30',
'value':58.0
}
]
},
'tag_id':320676
},
{
'data':{
'score':[
{
'time':'2015-03-01 00:00:25',
'value':78.0
},
{
'time':'2015-03-01 00:05:25',
'value':57.0
}
]
},
'tag_id':320677
}
],
'meta':None,
'requested':'2018-04-15 13:00:00'
}
答案 0 :(得分:1)
然而,虽然这最终实现了预期的结果,但是需要花费大量时间来迭代具有相同结构的较大文件。
我建议如下:
检查问题是否与您的迭代追加有关。熊猫不是很擅长顺序添加行。这段代码怎么样:
tups = []
for k, v in enumerate(my_request['content']):
for k1, v1 in enumerate(v['data']['score']):
tups.append(v['tag_id'], v1['time'], v1['value'])
df = pd.DataFrame(tups, columns=['tag_id', 'time', 'value])
如果上述内容不够快,请检查它是否是
的JSON解析部分for k, v in enumerate(my_request['content']):
for k1, v1 in enumerate(v['data']['score']):
v['tag_id'], v1['time'], v1['value']
1.很可能足够快。但是,如果没有,请检查ujson
对于这种情况是否更快。