You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:根据嵌套路径字符串动态生成DataFrame列的方案问询

解决嵌套JSON变更路径的分层DataFrame展示问题

问题核心

你当前通过固定位置的字符串切片提取DeepDiff返回的路径字段,仅能处理特定层级的嵌套结构,无法适配不同深度的JSON变更路径,需要实现动态解析路径层级、自动生成对应分层列的DataFrame,完成变更字段的分层展示。

解决方案

核心思路是先通用解析路径字符串提取所有嵌套层级的字段名,再根据所有路径的最大深度动态生成列名,最后构造统一结构的DataFrame。

1. 路径解析优化

用正则表达式替代固定位置切片,可适配任意嵌套深度的路径提取:

import re

def parse_deepdiff_path(path_str):
    # 匹配所有['xxx']格式的字段名并提取
    return re.findall(r"\['(.*?)'\]", path_str)

# 测试示例
k = """root['prod1']['p_col']['c_col']"""
path_parts = parse_deepdiff_path(k)
# 输出结果: ['prod1', 'p_col', 'c_col']

2. 动态生成分层列并构造DataFrame

先收集所有变更记录的路径,确定最大嵌套深度,再生成对应列名,最后填充数据:

import pandas as pd

# 模拟DeepDiff返回的变更记录(包含不同嵌套深度)
change_records = [
    {"path": """root['prod1']['p_col']['c_col']""", "old_value": 10, "new_value": 20},
    {"path": """root['prod2']['price']""", "old_value": 50, "new_value": 55},
    {"path": """root['prod3']['attr']['size']['width']""", "old_value": 100, "new_value": 120}
]

# 解析所有路径并获取最大嵌套深度
parsed_paths = [parse_deepdiff_path(rec['path']) for rec in change_records]
max_depth = max(len(parts) for parts in parsed_paths)

# 生成分层列名:第一层为product,第二层为parent-field,后续为fieldN
column_names = []
if max_depth >= 1:
    column_names.append("product")
if max_depth >= 2:
    column_names.append("parent-field")
if max_depth >= 3:
    column_names.extend([f"field{i}" for i in range(1, max_depth - 1 + 1)])
# 追加变更值列
column_names.extend(["old_value", "new_value"])

# 构造DataFrame数据行
data_rows = []
for rec, parts in zip(change_records, parsed_paths):
    row = list(parts)
    # 对不足最大深度的层级填充空值,保证结构统一
    row += [None] * (max_depth - len(row))
    row.extend([rec['old_value'], rec['new_value']])
    data_rows.append(row)

# 生成最终DataFrame
df = pd.DataFrame(data_rows, columns=column_names)
print(df)

输出结果

product parent-field field1 field2  old_value  new_value
0   prod1        p_col  c_col   None         10         20
1   prod2         None   None   None         50         55
2   prod3         attr   size  width        100        120

关键说明

  • 正则解析方法彻底解决了固定切片无法适配多层级嵌套的问题;
  • 动态列名基于所有路径的最大深度生成,确保所有层级的变更字段都能分层展示;
  • 空值填充保证了DataFrame结构的统一性,便于后续分析处理。

内容的提问来源于stack exchange,提问作者Kavya shree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:03:15