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

如何将Pandas DataFrame按层级结构转换为YAML格式?

问题描述

现有如下结构的Pandas DataFrame:

import pandas as pd
df = pd.DataFrame({
    'title': ['dashboard1', 'dashboard1', 'dashboard2'],
    'srv': ['ods', 'ods', 'ods'],
    'db': ['db1', 'db1', 'db2'],
    'sch': ['S1', 'S2', 'S4'],
    'nm': ['Name1', 'Name2', 'Name3']
})

需要将其转换为层级结构的YAML,目标格式如下:

title: dashboard1
dataSources:
  dataObjects:
    - srv: ods
      db: db1
      sch: S1
      nm: Name1
    - srv: ods
      db: db1
      sch: S2
      nm: Name2

title: dashboard2
dataSources:
  dataObjects:
    - srv: ods
      db: db2
      sch: S4
      nm: Name3

尝试过以下代码但未达到预期效果:

yaml.dump({'dataObjects': df.groupby('title')['nm'].apply(list).to_dict()}, allow_unicode=True)
解决方案

可以通过分组构造字典结构再使用PyYAML序列化的方式实现,步骤如下:

  1. 导入必要库:
import pandas as pd
import yaml
  1. 按title分组,为每个分组生成对应的层级字典:
# 分组并构造每个title的完整结构
result = []
for title, group in df.groupby('title'):
    # 把分组内的行转成字典列表,对应dataObjects的条目
    data_objects = group.drop('title', axis=1).to_dict('records')
    # 组装当前title的层级结构
    result.append({
        'title': title,
        'dataSources': {
            'dataObjects': data_objects
        }
    })
  1. 将构造好的字典序列化为符合要求的YAML:
# 生成标准多文档YAML(用---分隔每个title块,符合YAML规范)
yaml_output = '\n---\n'.join(
    yaml.dump(item, allow_unicode=True, default_flow_style=False, sort_keys=False) 
    for item in result
)

print(yaml_output)

执行后输出结果:

title: dashboard1
dataSources:
  dataObjects:
    - srv: ods
      db: db1
      sch: S1
      nm: Name1
    - srv: ods
      db: db1
      sch: S2
      nm: Name2
---
title: dashboard2
dataSources:
  dataObjects:
    - srv: ods
      db: db2
      sch: S4
      nm: Name3

关键说明

  • groupby('title')实现按仪表盘标题分组,每个分组对应目标YAML中的一个独立块
  • group.drop('title', axis=1).to_dict('records')直接把分组内的每行数据转成字典,完美匹配dataObjects下的条目格式
  • yaml.dump的参数default_flow_style=False确保列表以展开形式输出(而非紧凑的方括号格式),sort_keys=False保留原DataFrame的列顺序
  • 标准YAML不允许重复的顶级键,因此用---分隔多个文档是规范写法;如果非要和示例完全一致(无---),可以直接序列化整个列表,但这种格式不符合YAML语法规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:48:29