pandas 1.3 起支持 to_xml()方法导出 XML,依赖 lxml 或 标准库 etree;默认 root 根节点、row 行节点,可自定义 root_name 和 row_name,支持 编码 设置与字符转义,但不原生支持属性及多层嵌套。

Pandas 1.3 版本起正式支持 to_xml() 方法,可直接将 DataFrame 导出为 XML 格式。但要注意:该方法默认依赖 lxml 或 etree(如 xml.etree.ElementTree),若未安装 lxml,会回退到 标准库,部分高级功能受限。
基础用法:生成简单结构化 XML
最简调用只需指定文件路径或返回 字符串:
- 写入文件:
df.to_xml("output.xml") - 获取字符串:
xml_str = df.to_xml(index=False)(index=False可省略行索引)
默认以 root 为根节点,每行数据用 row 包裹,列名作为子节点名,值为文本内容。例如 DataFrame 含 name 和 age 列,会生成类似:
自定义节点名称与层级结构
用 root_name、row_name 控制外层标签:
-
df.to_xml("data.xml", root_name="students", row_name="student")→ 根为 <code><students></students>,每行为 <code><student></student> - 支持嵌套:设
row_name="person"并配合namespaces或预处理列名(如用点号 <code>"address.city"),但原生不自动创建多层嵌套;需先用pd.json_normalize展开字典列,或手动构造层级列再导出
处理特殊字符与 编码
XML 对非法字符(如控制符、未转义的 <code>&)敏感:
-
df.to_xml(……, parser="lxml")(推荐)会自动转义;用标准库时建议加escape_chars=True - 指定编码:
df.to_xml("out.xml", encoding="utf-8"),文件头将包含<?xml version='1.0' encoding='utf-8'?> - 含中文时务必设
encoding="utf-8",否则可能报错或乱码
注意事项与 常见问题
该方法不支持直接导出带属性(Attribute)的 XML(如 <student id="1"></student>)。若需属性,有两种方式:
- 临时添加一列如
df["id"] = [1, 2, 3],导出后用字符串替换或 etree 手动修改 - 弃用
to_xml,改用xml.etree.ElementTree手动构建更灵活的结构 - 空值(
NaN)默认输出为空标签(<age></age>),可用na_rep="NULL"替换为指定字符串