JSON扁平化以进行分析

时间:2020-04-07 08:46:47

标签: python json pandas

需要一点帮助。我需要弄平这个json,以便我可以将其用于分析。

json的示例是:

{'data': [{'tag': 'U128_CRC_2', 'timestamp': 1575234889002, 'value': 0.0}],
 'metadata': {'event': 'alarm.reset',
  'idx': '1372',
  'timestamp': 1575234889.002701},
 'productID': '41ae4b41-56be-4bf2-a6a8-7aee4d15bf54',
 'timestamp': 1575234889008,
 'topicIdx': '1'}

我运行了以下代码:

from pandas import json_normalize

with open('NewJson.json') as f:
    d1 = json.load(f)

works_data = json_normalize(data=d1, record_path='data', 
                            meta=['tag','value','timestamp'])

我同样得到以下错误:

KeyError: "Try running with errors='ignore' as key 'tag' is not always present"

有人可以帮忙吗

1 个答案:

答案 0 :(得分:1)

您的问题是“数据”键是一个列表,是一个字典,是一个字典。您必须手动删除列表:

示例:

from pandas.io.json import json_normalize
d1 = {'data': [{'tag': 'U128_CRC_2', 'timestamp': 1575234889002, 'value': 0.0}],
 'metadata': {'event': 'alarm.reset',
  'idx': '1372',
  'timestamp': 1575234889.002701},
 'productID': '41ae4b41-56be-4bf2-a6a8-7aee4d15bf54',
 'timestamp': 1575234889008,
 'topicIdx': '1'}

d1['data'] = d1.get('data')[0]

works_data = json_normalize(data=d1)
works_data

输出:

            productID                               timestamp       topicIdx    data.tag        data.timestamp  data.value     metadata.event   metadata.idx    metadata.timestamp
0           41ae4b41-56be-4bf2-a6a8-7aee4d15bf54    1575234889008   1           U128_CRC_2      1575234889002   0.0            alarm.reset      1372            1.575235e+09