我有一个 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]}]}]}
我尝试对熊猫使用方法:
import pandas as pd
pdp = pd.json_normalize(PDPjson['result'],['data'])
所以我可以将它放入数据框中,但我正在获取带有日期列表的列和带有值列表的列。
我想要得到的只是一个包含两列、时间戳和值的数据框。
我如何从这里执行此操作?
答案 0 :(得分:1)
您可以在 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
答案 1 :(得分:1)
我按如下方式创建了您的 JSON 对象:
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
不要担心 values 列的较小精度,它只是 Jupyter Notebook 呈现数据的方式。
当你跑步时result.iloc[0,1]
你会得到:
3880.834490740741
完全精确。