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

如何用Python循环将Dataframe转换为层级化JSON格式?

解决Dataframe转指定结构JSON的分组循环实现问题

你的问题核心是没有按源表-目标表的组合进行分组,导致所有路径被合并到单个条目里。下面提供两种实现方式,其中包含你需要的循环实现方法。

先明确示例场景

假设你的Dataframe结构如下:

import pandas as pd

df = pd.DataFrame({
    "src_table": ["table_a", "table_a", "table_b"],
    "src_path": ["db_a.schema_a.table_a.col1", "db_a.schema_a.table_a.col2", "db_b.schema_b.table_b.col1"],
    "trg_table": ["target_a", "target_a", "target_b"],
    "trg_path": ["db_t.schema_t.target_a.col_x", "db_t.schema_t.target_a.col_y", "db_t.schema_t.target_b.col_z"]
})

目标JSON结构要求每个源表-目标表组合对应一个条目,包含各自的路径列表:

[
    {
        "src_table": "table_a",
        "src_path": ["db_a.schema_a.table_a.col1", "db_a.schema_a.table_a.col2"],
        "trg_table": "target_a",
        "trg_path": ["db_t.schema_t.target_a.col_x", "db_t.schema_t.target_a.col_y"]
    },
    {
        "src_table": "table_b",
        "src_path": ["db_b.schema_b.table_b.col1"],
        "trg_table": "target_b",
        "trg_path": ["db_t.schema_t.target_b.col_z"]
    }
]

方法1:用Pandas GroupBy(简洁高效)

如果不需要强制循环,GroupBy是最直接的方式:

import json

# 按源表和目标表分组,聚合路径为列表
grouped_df = df.groupby(["src_table", "trg_table"], as_index=False).agg(
    src_path=("src_path", list),
    trg_path=("trg_path", list)
)

# 转换为JSON
result_json = json.dumps(grouped_df.to_dict("records"), indent=2)
print(result_json)

方法2:手动循环实现(满足你的需求)

核心逻辑是用**(src_table, trg_table)**作为唯一分组键,判断是否已存在该分组,不存在则创建新条目,存在则追加路径:

import json

result = []
# 用字典记录已存在的分组,避免重复创建
group_map = {}

# 遍历Dataframe的每一行
for _, row in df.iterrows():
    group_key = (row["src_table"], row["trg_table"])
    # 如果分组不存在,初始化条目并加入结果列表
    if group_key not in group_map:
        new_group = {
            "src_table": row["src_table"],
            "trg_table": row["trg_table"],
            "src_path": [],
            "trg_path": []
        }
        group_map[group_key] = new_group
        result.append(new_group)
    # 将当前行的路径追加到对应分组
    group_map[group_key]["src_path"].append(row["src_path"])
    group_map[group_key]["trg_path"].append(row["trg_path"])

# 转为格式化的JSON
result_json = json.dumps(result, indent=2)
print(result_json)

这段循环代码会确保每个源表-目标表组合对应独立的条目,路径列表只会归集到对应的分组下,不会出现所有数据合并的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:22:41