如何解析XML指定标签字段并生成pandas DataFrame
实现方案
不需要手写复杂的多层for循环逐标签爬取,两种方法都可以快速实现需求,优先推荐第一种pandas原生方法,代码最简洁。
方法1:用pandas内置read_xml快速读取(推荐)
pandas自带XML解析能力,只需要指定节点的XPath路径,就能直接把节点内容读成DataFrame,对于嵌套的二级子节点单独读取一次再合并即可。
首先确保你已经安装必要依赖:pip install pandas lxml
完整实现代码:
import pandas as pd # 配置项,把这里换成你自己的XML文件路径,或者直接传入XML字符串 xml_source = "your_file.xml" # 先读取crewMember一级节点下的直接字段 crew_base = pd.read_xml( xml_source, xpath=".//crewMember", elems_only=True ) # 再读取flightQualification子节点下的字段 crew_qual = pd.read_xml( xml_source, xpath=".//crewMember/flightQualification", elems_only=True ) # 合并整理为目标表结构,同时处理姓名首字母大写、字段类型转换 result = pd.DataFrame({ "ID": crew_base["id"].astype(int), "firstname": crew_base["firstName"].str.capitalize(), "lastname": crew_base["lastName"].str.capitalize(), "isVaccinated": crew_qual["isVaccinated"].map({"true": True, "false": False}) })
运行后输出的result完全匹配你需要的表结构:
| ID | firstname | lastname | isVaccinated |
|---|---|---|---|
| 12345 | John | Doe | True |
| 22222 | Jane | Doe | True |
如果你的XML不是本地文件,是已经加载到内存的字符串,直接把xml_source换成对应的字符串变量即可,不需要额外修改其他逻辑。
方法2:用标准库xml.etree.ElementTree遍历实现(灵活度更高)
如果你后续需要加复杂的字段判断、清洗逻辑,可以用Python标准库的XML解析模块遍历节点,不需要额外安装第三方包,逻辑也很简单:
import xml.etree.ElementTree as ET import pandas as pd tree = ET.parse("your_file.xml") root = tree.getroot() data_list = [] # 遍历所有crewMember节点 for member in root.findall(".//crewMember"): data_list.append({ "ID": int(member.findtext("id")), "firstname": member.findtext("firstName").capitalize(), "lastname": member.findtext("lastName").capitalize(), # 直接用路径定位二级子节点,不需要多层循环嵌套 "isVaccinated": member.findtext("flightQualification/isVaccinated") == "true" }) result = pd.DataFrame(data_list)
这里不需要嵌套多层for循环找子节点,直接给findtext传入节点的相对路径就能直接拿到嵌套字段的值,比逐层找子标签的写法简单很多。
内容的提问来源于stack exchange,提问作者rbasu98
相关产品推荐
相关产品推荐

