如何在Pandas中规范化嵌套JSON数据?
处理JSON嵌套字典列表生成规范化表格
场景说明
针对你提供的包含嵌套字典列表的JSON数据(如perfect_tonics.data、perfect_garnishes.data),以下是将其转换为规范化Pandas表格的可行方案:
方法一:使用pd.json_normalize完整参数(推荐)
pd.json_normalize支持指定嵌套列表路径与顶层元数据,可一次性生成关联后的结构化表格:
展开「完美搭配汤力水」数据
import pandas as pd df_tonics = pd.json_normalize( file_json, record_path=['perfect_tonics', 'data'], # 嵌套列表的完整层级路径 meta=['id', 'name', 'producer', 'country', 'abv'], # 需要保留的顶层Gin信息字段 meta_prefix='gin_' # 给顶层字段加前缀,避免与汤力水字段重名 )
生成的表格每行对应一组Gin-汤力水组合,同时保留Gin的基础信息与汤力水的详情。
展开「完美搭配装饰物」数据
同理处理装饰物嵌套列表:
df_garnishes = pd.json_normalize( file_json, record_path=['perfect_garnishes', 'data'], meta=['id', 'name', 'producer', 'country', 'abv'], meta_prefix='gin_' )
方法二:先扁平化顶层,再展开嵌套列合并
若偏好分步处理:
- 先提取顶层扁平化数据:
df_top = pd.json_normalize(file_json)
- 展开「完美搭配汤力水」并关联顶层数据:
# 拆分嵌套的汤力水列表为独立行 tonics_expanded = df_top['perfect_tonics.data'].explode().apply(pd.Series) # 合并顶层数据与展开后的汤力水信息,重置索引避免错位 df_tonics = df_top.drop('perfect_tonics.data', axis=1).join(tonics_expanded).reset_index(drop=True)
- 同理处理「完美搭配装饰物」:
garnishes_expanded = df_top['perfect_garnishes.data'].explode().apply(pd.Series) df_garnishes = df_top.drop('perfect_garnishes.data', axis=1).join(garnishes_expanded).reset_index(drop=True)
注意事项
- 若JSON包含多条Gin数据,两种方法都会自动遍历所有条目,生成对应的关联行
- 使用
meta_prefix可有效避免顶层字段与嵌套字段的命名冲突(如两个id字段)
内容的提问来源于stack exchange,提问作者Oravecz Péter
相关产品推荐
相关产品推荐

