如何优化json_normalize代码实现多实例嵌套字典转pandas DataFrame
批量处理嵌套监控数据生成DataFrame方案
核心思路
先把所有实例的元数据统一整合,直接调用一次pd.json_normalize完成全量数据解析,避免循环拼接DataFrame带来的性能损耗,8000实例量级下运行效率足够。
具体实现步骤
步骤1:整理原始数据结构
假设你已经将所有实例数据整理为以实例ID为键、对应监控列表为值的字典结构,示例如下:
raw_data = { "Instance1": [{'datapoints': [{'statistic': 'Minimum', 'timestamp': '2021-08-31 06:50:00.000000', 'value': 59.03}, {'statistic': 'Minimum', 'timestamp': '2021-08-18 02:50:00.000000', 'value': 59.37}, {'statistic': 'Minimum', 'timestamp': '2021-08-24 16:50:00.000000', 'value': 58.84}], 'metric': 'VolumeIdleTime', 'unit': 'Seconds'}], "Instance2": [{'datapoints': [{'statistic': 'Minimum', 'timestamp': '2021-08-31 06:50:00.000000', 'value': 60}, {'statistic': 'Minimum', 'timestamp': '2021-08-18 02:50:00.000000', 'value': 55.45}, {'statistic': 'Minimum', 'timestamp': '2021-08-24 16:50:00.000000', 'value': 54.16}], 'metric': 'VolumeIdleTime', 'unit': 'Seconds'}], # 剩余所有实例数据 }
如果你的原始数据是每行InstanceX [JSON数据]的文本格式,先逐行拆分实例ID和JSON字符串,用json.loads()转换为Python对象后塞入上述字典即可。
步骤2:批量整合并解析数据
import pandas as pd import json # 给每个监控条目追加实例ID字段 processed_list = [] for instance_id, metric_list in raw_data.items(): for metric_item in metric_list: metric_item["instance_id"] = instance_id processed_list.append(metric_item) # 一次解析全量数据 df = pd.json_normalize( processed_list, record_path="datapoints", meta=["metric", "unit", "instance_id"] ) # 可选:转换timestamp为时间格式方便后续分析 df["timestamp"] = pd.to_datetime(df["timestamp"])
输出结果说明
最终生成的DataFrame会包含以下字段:
- statistic:统计类型
- timestamp:监控时间
- value:监控数值
- metric:指标名称
- unit:数值单位
- instance_id:实例ID
内容的提问来源于stack exchange,提问作者Sathish Kumar
相关产品推荐
相关产品推荐

