如何将字典键作为新列 从嵌套字典创建Pandas DataFrame
嵌套字典转指定结构Pandas DataFrame实现
需求说明
需要将特定结构的嵌套字典转换为Pandas DataFrame,字段映射规则:
- 字典外层键作为
FRUIT列取值 - 内层列表中每个字典的
price字段对应PRICE列、store字段对应STORE列
示例输入字典
fruit_dict = { "apple":[ {"price":19, "store":"xyz"}, {"price":13, "store":"abc"} ], "pear":[ {"price":25, "store":"xyz"} ] }
期望输出结构
FRUIT PRICE STORE 0 apple 19 xyz 1 apple 13 abc 2 pear 25 xyz
此前通过循环逐行给FRUIT列赋值、再配合pd.json_normalize提取内层字段的实现流程繁琐,需要更简便高效的扁平化方案。
简便实现方案
不需要编写复杂的逐行赋值逻辑,以下两种方案都可以快速得到目标结果:
方案1:Pandas原生方法链式实现
利用Pandas自带的字典读取、行展开、字段拆分方法,核心代码仅3行:
import pandas as pd # 读取字典为索引为水果名的结构,展开内层列表为多行 df = pd.DataFrame.from_dict(fruit_dict, orient="index", columns=["tmp"]).explode("tmp").reset_index() # 拆分内层字典字段,合并水果名列 df = pd.concat([df["index"].rename("FRUIT"), pd.json_normalize(df["tmp"])], axis=1) # 统一列名 df.columns = ["FRUIT", "PRICE", "STORE"]
方案2:列表推导预扁平化实现
先通过轻量循环把嵌套字典拍平为一维字典列表,再直接构造DataFrame,大数据量下性能更优:
import pandas as pd flat_data = [ {"FRUIT": fruit, "PRICE": item["price"], "STORE": item["store"]} for fruit, items in fruit_dict.items() for item in items ] df = pd.DataFrame(flat_data)
两种方案输出完全匹配预期结构,可根据个人代码习惯选择。
内容的提问来源于stack exchange,提问作者thejoker34
相关产品推荐
相关产品推荐

