You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:36:04