基于指定嵌套字典,如何提取数据至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
相关产品推荐
相关产品推荐

