• 设为首页 加入收藏
  • 基于Pandas的动态JSON路径递归解析:可变深度嵌套字段自动展平方案

    [ 2026/5/29 19:58:16 ]
    本文介绍如何从 deepdiff 生成的嵌套路径字符串(如 `root[''prod1''][''p_col''][''c_col'']`)中自动提取多级字段名,并动态构建对应数量的列,实现灵活、可扩展的变更分析表格。 在使用 deepdiff 比较嵌套 JSON 文档时,values_changed 字典的键是形如 root[''prod1''][''p_col''][''c_col2''][''c_col5''] 的路径字符串。若需将这些路径结构映射为结构化 DataFrame(例如区分 product、parent-field、field 等层级),硬编码切分逻辑(如多次 find/split)既脆弱又难以维护。理想方案是基于实际路径深度动态生成列,而非预设固定列数。 推荐采用正则 + str.extractall 的向量化方式,稳健提取所有方括号内的标识符: 复制AI写代码 import pandas as pd import re # 假设 values_changed 已从 DeepDiff 获取(字典格式) values_changed = { "root[''prod1''][''p_col''][''c_col'']": {"new_value": -2.866711109999983, "old_value": -2.75}, "root[''prod1''][''p_col23'']": {"new_value": 1, "old_value": 54}, "root[''prod1''][''p_col''][''c_col2''][''c_col5'']": {"new_value": 1.678, "old_value": 5.12} } # 步骤1:转为 DataFrame(行索引为原始路径) df = pd.DataFrame.from_dict(values_changed, orient=''index'') # 步骤2:用正则提取所有 [''xxx''] 中的字段名(忽略 ''root'') # \[''(\w+)''\] 匹配单引号包围的字母数字字段;extractall 返回 MultiIndex Series path_parts = df.index.str.extractall(r"\[''(\w+)''\]")[0] # 步骤3:展开为宽表,每级对应一列;列名按语义映射(可扩展) max_depth = path_parts.index.get_level_values(''match'').max() + 1 column_mapping = {0: ''product'', 1: ''parent-field''} # 其余列统一命名为 ''field'',Pandas 自动处理重复列名(field, field, field...) columns = [column_mapping.get(i, ''field'') for i in range(max_depth)] # 步骤4:unstack 展开 + 重命名列 + 关联原数据 expanded = (path_parts.unstack(''match'') .rename(columns=lambda i: columns[i] if i < len(columns) else ''field'') .join(df.reset_index(drop=True))) print(expanded) 输出结果将自动适配最长路径深度(本例为 4 级),生成如下结构: product parent-field field field new_value old_value prod1 p_col c_col NaN -2.866711 -2.75 prod1 p_col23 NaN NaN 1.000000 54.00 prod1 p_col c_col2 c_col5 1.678000 5.12 ✅ 关键优势: 完全动态:无需预设字段层数,自动适配任意嵌套深度; 健壮可靠:正则 \[''(\w+)''\] 精准匹配合法字段名,避免字符串索引越界或引号解析错误; 向量化高效:利用 Pandas 内置方法,比循环+ast.literal_eval或手动 split 快数倍; 易扩展:通过修改 column_mapping 字典即可调整前 N 列语义(如增加 sub-parent),后续列自动归为 field。 ⚠️ 注意事项: 路径中若含非 \w+ 字符(如连字符、点号),需调整正则为 r"\[''([^''\]]+)''\]" 并注意 SQL/CSV 导出时的转义; 若需严格对齐列数(如补空字符串而非 NaN),可在最后调用 .fillna(''''); 实际项目中建议封装为函数,接收 values_changed 字典和可选列名映射,提升复用性。 此方法将路径解析从“字符串手术”升级为“结构化提取”,是构建可维护文档差异分析流水线的核心实践。
    查找
    热门文章
  • 导航站长必看:说说导航网站的推广方法和小心的事情
  • 坚持外链建设时永久战
  • 网络广告联盟是什么意思?--广告联盟评测
  • 网站交换外链需综合考虑的多方因素
  • 影响网站收录的六大因素
  • 浅谈一下关于伪原创
  • 浅谈垃圾站的运营模式
  • 服务器托管的优势与其功能的详解介绍
  • SEO不单单是关键词排名 还有整站优化
  • 优化行业站不要急功近利
  • 广告联盟评测之浅谈
  • 手把手教你利用英文站做LEAD赚美金
  • 谷歌不如百度几点原因--联盟评测看法
  • 6年的站长之路,路在何方
  • 程序员每天是怎么生活的
  • 百度蜘蛛饲养技巧
  • 推广网站的10个方法
  • 讲述一个农民站长的故事
  • 一个成功网站必需做到的几个要点
  • Google Adsense广告申请注册向导
  • 广告联盟评测纷飞 殃及站长无数
  • Google联盟申请完全手册--广告联盟评测
  • google联盟快速申请方法
  • 购买弹窗流量做日付广告联盟经历
  • 几个联盟的比较
  • 在自己网站上放Google广告申请详细步骤
  • 京华时报:优酷CEO古永锵 _ 坚持领跑将寒冬留给对手
  • GOOGLE广告联盟注册交流
  • 网站优化必不可少的5种心态
  • 如何提高个人网站收录率
  • 网站优化五大陷阱
  • 购买美国空间常见的四大误区
  • 第一视频广告联盟介绍和评测
  • 如何申请google广告连联盟Google Adsense广告挣钱
  • 浅谈广告联盟评测网推广技巧和秘籍
  • 网站建设的基本原则
  • 浅谈网站的几种盈利方式
  • 网站优化与竞价排名优缺点分析
  • 中国民航报:谷歌浏览器很好
  • 做网站了解对手方能百战不怠
  • 给网站收录率下个定义
  • 百什么是度联盟?
  • 推荐新手使用8大原则选择服务器和服务器托管
  • 如何有效推广网站--广告联盟评测网只我见
  • 为什么我的桌面会自动刷新?
  • 及时优化网站中的死链和错误链接
  • 告诉你最有效的提高网站访问量方法
  • 域名过期后多久可以注册
  • 什么是广告联盟评测?
  • 太平洋广告联盟宣布关闭
  • 做SEO时要重视的4项数据