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

基于指定嵌套字典,如何提取数据至Pandas DataFrame?

将嵌套字典转换为Pandas DataFrame的最优方法

针对你提供的嵌套字典,我们可以根据不同模块的数据结构分步骤提取转换,既保留信息完整性又保证逻辑清晰:

1. 提取基础元数据(base_name、outlier、out_name)

这部分包含列表和单个值,我们可以将base_name的每个元素对应一行,重复填充outlier和out_name:

import pandas as pd

dictionary = {
    "base_name" : ["abc", "abc_2"],
    "conditional" : {
        "base_name" : "abc_cond",
        "conditions" : [{"func" : "==", "ref" : 1}],
        "res" : -0.044
    },
    "outlier" : 0.232,
    "out_name" : "var",
    "transformation" : [
        {"func" : "==", "ref" : -1, "res" : -0.323},
        {"func" : "<=", "ref" : 23, "res" : -0.123},
        {"func" : ">", "ref" : -5, "res" : -0.433},
        {"func" : "else", "res" : -0.663},
    ]
}

# 转换基础元数据
base_meta_df = pd.DataFrame({
    "base_name": dictionary["base_name"],
    "outlier": [dictionary["outlier"]] * len(dictionary["base_name"]),
    "out_name": [dictionary["out_name"]] * len(dictionary["base_name"])
})

2. 提取条件规则(conditional)

这里嵌套了列表类型的conditions,我们先拆分外层键值对,再和conditions合并:

# 处理条件规则数据
cond_raw = dictionary["conditional"].copy()
cond_conditions_df = pd.DataFrame(cond_raw.pop("conditions"))
cond_df = pd.concat([pd.DataFrame([cond_raw]), cond_conditions_df], axis=1)

3. 提取转换规则(transformation)

这部分本身就是标准的字典列表,直接用Pandas原生方法转换即可:

# 转换转换规则数据
trans_df = pd.DataFrame(dictionary["transformation"])

方案优势

  • 针对性处理不同结构的数据,避免强制扁平化导致的信息混乱
  • 保留各模块的逻辑独立性,后续查询或修改时更高效
  • 代码简洁,全部使用Pandas原生API,减少自定义逻辑的维护成本

如果需要将所有信息整合到单个DataFrame(适合小数据量场景),可以添加标识列后合并:

# 整合所有数据
base_meta_df["data_type"] = "基础元数据"
cond_df["data_type"] = "条件规则"
trans_df["data_type"] = "转换规则"

all_data_df = pd.concat([base_meta_df, cond_df, trans_df], ignore_index=True).fillna("-")

内容的提问来源于stack exchange,提问作者shaftel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:07:17