Python解析XML提取节点:如何将IDOPERATION属性并入Pandas DataFrame
解决方案:关联OPERATION的IDOPERATION属性到Score数据
步骤1:明确XML层级关系
首先确认你的XML结构是OPERATION节点包含多个Score子节点(参考示例结构),我们将通过父节点(OPERATION)获取IDOPERATION属性,再与子节点(Score)的属性组合。
示例XML结构:
<ROOT> <OPERATION IDOPERATION="OP-001"> <Score SCORE="90" PI="0.92" EXCLUSION="No"/> <Score SCORE="85" PI="0.87" EXCLUSION="Yes"/> </OPERATION> <OPERATION IDOPERATION="OP-002"> <Score SCORE="95" PI="0.95" EXCLUSION="No"/> </OPERATION> </ROOT>
步骤2:修改代码,关联父节点属性
遍历每个OPERATION节点,先提取IDOPERATION属性,再遍历该节点下的所有Score子节点,将IDOPERATION加入每一行数据中:
import pandas as pd import xml.etree.ElementTree as ET # 解析XML文件 tree = ET.parse('your_file.xml') root = tree.getroot() # 初始化存储数据的列表 data_rows = [] # 遍历每个OPERATION节点 for operation in root.findall('.//OPERATION'): # 获取当前OPERATION的IDOPERATION属性 id_operation = operation.get('IDOPERATION') # 遍历当前OPERATION下的所有Score节点 for score in operation.findall('./Score'): # 组合行数据:IDOPERATION + Score的三个属性 row = { 'IDOPERATION': id_operation, 'SCORE': score.get('SCORE'), 'PI': score.get('PI'), 'EXCLUSION': score.get('EXCLUSION') } data_rows.append(row) # 转换为DataFrame df = pd.DataFrame(data_rows) # 可选:转换数据类型(比如SCORE和PI转为数值型) df['SCORE'] = pd.to_numeric(df['SCORE']) df['PI'] = pd.to_numeric(df['PI']) print(df)
步骤3:验证结果
运行后得到的DataFrame会包含你需要的四列:
| IDOPERATION | SCORE | PI | EXCLUSION |
|---|---|---|---|
| OP-001 | 90 | 0.92 | No |
| OP-001 | 85 | 0.87 | Yes |
| OP-002 | 95 | 0.95 | No |
如果你用lxml库的替代写法
如果习惯用lxml,逻辑完全一致,只是导入和解析方式略有不同:
import pandas as pd from lxml import etree tree = etree.parse('your_file.xml') root = tree.getroot() data_rows = [] for operation in root.xpath('//OPERATION'): id_operation = operation.get('IDOPERATION') for score in operation.xpath('./Score'): row = { 'IDOPERATION': id_operation, 'SCORE': score.get('SCORE'), 'PI': score.get('PI'), 'EXCLUSION': score.get('EXCLUSION') } data_rows.append(row) df = pd.DataFrame(data_rows)
内容的提问来源于stack exchange,提问作者Bryam Williams Hirsch Trujillo
相关产品推荐
相关产品推荐

