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

使用Python与LXML从Pandas DataFrame生成XML文件的实现问询

用Pandas DataFrame生成带子元素的XML文件解决方案

看起来你已经有了不错的开头,我来帮你完成这个XML生成功能。首先咱们得明确合理的XML结构——从你的DataFrame列来看,每一行数据对应一个完整的客户端报告条目,所以最佳结构应该是<ClientReport>作为根节点,里面包含多个<Client>子节点,每个<Client>下再嵌套<ID>、<ServiceDate>和<ServiceCategory>这些子元素。

下面是完成后的完整代码,我会一步步给你解释:

import pandas as pd
from lxml import etree as et

# 你的原始DataFrame
df = pd.DataFrame({
    'id_profile': [439, 444654, 56454, 12222], 
    'ServiceDate': ['2017-12-05', '2017-01-25', '2017-12-05', '2017-01-25'], 
    'PrimaryServiceCategory': [25, 25, 33, 25]
})

# 创建XML根节点
root = et.Element('ClientReport')

# 遍历DataFrame每一行,生成对应的XML子节点
for _, row in df.iterrows():
    # 为每一行数据创建一个<Client>子节点
    client_node = et.SubElement(root, 'Client')
    
    # 添加<ID>子元素,注意要把数字转为字符串(XML文本必须是字符串类型)
    id_elem = et.SubElement(client_node, 'ID')
    id_elem.text = str(row['id_profile'])
    
    # 添加<ServiceDate>子元素
    date_elem = et.SubElement(client_node, 'ServiceDate')
    date_elem.text = row['ServiceDate']
    
    # 添加<ServiceCategory>子元素
    category_elem = et.SubElement(client_node, 'ServiceCategory')
    category_elem.text = str(row['PrimaryServiceCategory'])

# 生成格式化的XML字符串(方便调试查看)
xml_output = et.tostring(root, pretty_print=True, encoding='utf-8')
print(xml_output.decode('utf-8'))

# 将XML保存到本地文件
tree = et.ElementTree(root)
tree.write(
    'client_report.xml',
    pretty_print=True,
    encoding='utf-8',
    xml_declaration=True  # 生成标准的XML声明头
)

代码核心细节说明:

  • 循环遍历行数据:用df.iterrows()遍历每一行,为每行创建独立的<Client>节点,这样XML结构更贴合数据逻辑,后续解析也更方便。
  • 类型转换处理:XML元素的文本必须是字符串,所以把id_profile和PrimaryServiceCategory这类数字型列转成字符串,避免报错。
  • 格式化输出:pretty_print=True会让XML自动缩进,可读性大幅提升;xml_declaration=True会在文件开头生成<?xml version='1.0' encoding='utf-8'?>标准声明。

运行代码后,你会得到格式工整的XML文件,示例内容如下:

<?xml version='1.0' encoding='utf-8'?>
<ClientReport>
  <Client>
    <ID>439</ID>
    <ServiceDate>2017-12-05</ServiceDate>
    <ServiceCategory>25</ServiceCategory>
  </Client>
  <Client>
    <ID>444654</ID>
    <ServiceDate>2017-01-25</ServiceDate>
    <ServiceCategory>25</ServiceCategory>
  </Client>
  <!-- 剩余两个Client条目省略 -->
</ClientReport>

如果你的XML结构需求和我假设的不一样(比如不需要<Client>节点,直接在根节点下重复字段),可以随时告诉我具体要求,我再帮你调整代码~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:35:12