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

如何解析含缺失子项的XML文件并转换为DataFrame?

解决SimpleXML转Pandas DataFrame时的字段缺失与列错位问题

问题根源

原代码的核心问题是将所有同标签的元素单独提取为独立列表,没有将字段与对应的<ns0:Report_Entry>条目绑定。当部分条目缺失ns0:userPrincipalName这类子项时,对应标签列表的长度会短于employeeID列表,循环时就会触发IndexError,同时还会导致不同条目间的数据错位匹配。

修正后的代码

from bs4 import BeautifulSoup
import pandas as pd

# 读取并解析XML文件
with open(wdpath + 'wd.xml', 'r') as wd:
    soup = BeautifulSoup(wd.read(), 'xml')

# 获取所有Report_Entry节点
report_entries = soup.find_all('ns0:Report_Entry')

data = []
for entry in report_entries:
    # 提取当前条目的字段,缺失则填充N/A
    emp_id = entry.find('ns0:employeeID').get_text() if entry.find('ns0:employeeID') else 'N/A'
    email = entry.find('ns0:userPrincipalName').get_text() if entry.find('ns0:userPrincipalName') else 'N/A'
    country = entry.find('ns0:country').get_text() if entry.find('ns0:country') else 'N/A'
    company = entry.find('ns0:company').get_text() if entry.find('ns0:company') else 'N/A'
    
    # 将当前条目数据加入列表
    data.append({
        'EmployeeID': emp_id,
        'Email': email,
        'Country': country,
        'Company': company
    })

# 转换为DataFrame并保存
ri = pd.DataFrame(data)
ri.to_csv(outpath + 'Report_' + cdt + '.csv', index=False)

代码说明

  1. 按条目遍历:直接定位所有<ns0:Report_Entry>节点,确保每个字段都属于当前条目,从根源避免数据错位。
  2. 字段缺失处理:对每个字段使用if-else判断,若当前条目找不到对应子标签,就用'N/A'填充。
  3. 字典式数据收集:用字典存储每个条目的字段,后续转DataFrame时自动匹配列名,无需手动对齐顺序。
  4. 文件操作优化:使用with语句自动管理文件资源,避免遗漏关闭文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 07:23:12