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

如何使用Pandas DataFrame.to_xml避免生成行或根重复元素?

解决pandas to_xml生成多余元素的问题

要匹配你提供的XSD结构,让<TEST>直接包含Content1等子元素(无<row>节点),可以通过以下两种实现方式:

方法一:利用pandas内置参数(推荐)

通过设置elements_only=True跳过根元素生成,同时将row_name指定为TEST,再手动添加XML声明,就能直接得到符合要求的XML:

import pandas as pd

for idx in range(df.shape[0]):
    # 提取单行数据
    single_row = df.iloc[idx:idx+1]
    # 过滤空值列(适配Content5可选的要求)
    single_row_clean = single_row.dropna(axis=1, how='all')
    # 生成仅包含TEST节点的XML片段
    row_xml = single_row_clean.to_xml(row_name="TEST", index=False, elements_only=True)
    # 拼接完整XML内容
    full_xml = '<?xml version="1.0" encoding="utf-8"?>\n' + row_xml
    # 写入文件(注意文件名区分不同行)
    with open(f"{base_path}/test_{idx}.xml", 'w', encoding='utf-8') as f:
        f.write(full_xml)

生成的XML示例:

<?xml version="1.0" encoding="utf-8"?>
<TEST>
  <Content1>123</Content1>
  <Content2>abc</Content2>
  <Content3>242136</Content3>
  <Content4>90°</Content4>
</TEST>

方法二:生成后移除标签

如果需要保留原有root_name设置,也可以先生成带<row>的XML,再通过正则替换去掉多余节点:

import pandas as pd
import re

for row_idx in range(df.shape[0]):
    df1 = df.iloc[row_idx:row_idx+1]
    # 生成带row节点的XML
    raw_xml = df1.to_xml(root_name="TEST", index=False)
    # 移除row标签及周围空白
    cleaned_xml = re.sub(r'\s*<row>\s*|\s*</row>\s*', '', raw_xml)
    # 写入文件
    with open(f"{base_path}/test_{row_idx}.xml", 'w', encoding='utf-8') as f:
        f.write(cleaned_xml)

关键说明

  • elements_only=True:告诉to_xml只生成行对应的元素,不包裹根节点
  • row_name="TEST":将行元素的名称设为目标根节点名TEST
  • dropna(axis=1, how='all'):自动过滤空值列,适配XSD中Content5可选的要求(空值时不生成该节点)

内容的提问来源于stack exchange,提问作者sa-biene

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:55:20