Python如何从嵌套JSON中提取信息并生成DataFrame
嵌套JSON多层级解析存入DataFrame解决思路
- 充分利用
pandas.json_normalize的高级参数
多数人仅使用该方法的默认参数,实际上它的record_path、meta、max_level参数可适配多层嵌套场景:record_path指定需要展开的嵌套数组的路径,可解决嵌套数组无法展开的问题meta指定需要保留的上层字段,展开嵌套内容后不会丢失上层关联信息- 示例代码:
import pandas as pd import json # 加载本地JSON数据 with open("your_file.json", "r", encoding="utf-8") as f: data = json.load(f) # 假设嵌套数组路径为data -> user -> order_list,保留上层的user_id、user_name字段 df = pd.json_normalize( data, record_path=["user", "order_list"], meta=[ "user_id", ["user", "user_name"] # 上层嵌套字段用列表指定路径 ], sep="." # 扁平化后的字段名用点分隔层级 ) - 自定义递归函数处理不规则深层嵌套
当JSON结构高度不规则、嵌套层级无统一规律时,可写递归函数将所有嵌套节点拍平,把嵌套路径转化为字段名:def flatten_json(nested_obj, parent_key="", sep="."): items = [] if isinstance(nested_obj, dict): for k, v in nested_obj.items(): new_key = f"{parent_key}{sep}{k}" if parent_key else k items.extend(flatten_json(v, new_key, sep=sep).items()) elif isinstance(nested_obj, list): for idx, item in enumerate(nested_obj): new_key = f"{parent_key}{sep}{idx}" if parent_key else str(idx) items.extend(flatten_json(item, new_key, sep=sep).items()) else: items.append((parent_key, nested_obj)) return dict(items) # 批量处理所有JSON对象后直接转DataFrame flatten_data = [flatten_json(item) for item in data] df = pd.DataFrame(flatten_data) - 分步骤拆分嵌套列
如果仅部分列存在深层嵌套,可先做第一层解析,再单独处理嵌套列后拼接回原表:# 第一层解析得到包含嵌套列的DataFrame df_first = pd.json_normalize(data) # 单独处理嵌套列nested_col df_nested = pd.json_normalize(df_first["nested_col"]).add_prefix("nested_col.") # 拼接并删除原嵌套列 df_final = pd.concat([df_first.drop("nested_col", axis=1), df_nested], axis=1)
内容的提问来源于stack exchange,提问作者Jodhvir Singh
相关产品推荐
相关产品推荐

