如何用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
相关产品推荐
相关产品推荐

