[英]Python - Parsing Nested Json
我有 json 文件,我试图解析并只得到两个值。 “时间戳”和“值”。 这是我的 json 文件的示例:
{'totalCount': 1,
'nextPageKey': None,
'result': [{'metricId': 'builtin:synthetic.browser.event.visuallyComplete.load',
'data': [{'dimensions': ['SYNTHETIC_TEST_STEP-123456'],
'dimensionMap': {'dt.entity.synthetic_test_step': 'SYNTHETIC_TEST_STEP-123456'},
'timestamps': [
1596326400000,
1616976000000,
1617062400000,
1617148800000,
1617235200000],
'values': [
3880.834490740741,
3879.6458333333335,
3826.3645833333335,
3890.871527777778,
3876.8199643493763]}]}]}
我尝试使用 pandas 的方法:
import pandas as pd
pdp = pd.json_normalize(PDPjson['result'],['data'])
所以我可以将它放入数据框中,但我得到的是带有日期列表的列和带有值列表的列。
我想要得到的只是一个带有两列时间戳和值的 dataframe。
我该如何从这里做到这一点?
您可以在timestamps
和values
上应用Series.explode
:
pdp = pdp[['timestamps', 'values']].apply(pd.Series.explode).reset_index(drop=True)
# timestamps values
# 0 1596326400000 3880.834491
# 1 1616976000000 3879.645833
# 2 1617062400000 3826.364583
# 3 1617148800000 3890.871528
# 4 1617235200000 3876.819964
我创建了您的 JSON object 如下:
txt = '''\
{ "totalCount": 1,
"nextPageKey": "None",
"result": [{"metricId": "builtin:synthetic.browser.event.visuallyComplete.load",
"data": [{"dimensions": ["SYNTHETIC_TEST_STEP-123456"],
"dimensionMap": {"dt.entity.synthetic_test_step": "SYNTHETIC_TEST_STEP-123456"},
"timestamps": [ 1596326400000, 1616976000000, 1617062400000,
1617148800000, 1617235200000],
"values": [ 3880.834490740741, 3879.6458333333335, 3826.3645833333335,
3890.871527777778, 3876.8199643493763]}]}]}'''
PDPjson = json.loads(txt)
然后我像你一样从json_normalize开始:
pdp = pd.json_normalize(PDPjson['result'], 'data')
缺少的步骤是:
result = pdp[['timestamps', 'values']].apply(lambda col: col.explode())\
.reset_index(drop=True)
结果是:
timestamps values
0 1596326400000 3880.83
1 1616976000000 3879.65
2 1617062400000 3826.36
3 1617148800000 3890.87
4 1617235200000 3876.82
不要担心值列的精度较低,这只是Jupyter Notebook呈现数据的方式。
当您运行例如result.iloc[0,1]
时,您将获得:
3880.834490740741
完全精确。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.