将xml数据转换为datafram

2024-04-19 05:01:35 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这样一个XML:

<Rules>
       <Set Parameter="4" To="90">
             <If Parameter="1087" EqualsTo="90" />
        </Set>
        <Set Parameter="5" To="-5">
             <If Parameter="1087" EqualsTo="87" />
        </Set>
        <Set Parameter="6" To="[-5,23;36,7;58,7;78,8;94,47]">
             <If Parameter="1087" EqualsTo="87" />
         </Set>
         <Set Parameter="14" To="7,5" />
         <Set Parameter="15" To="-7,5" />
         <Set Parameter="16" To="0,5" />
         <Set Parameter="17" To="3" />
         <Set Parameter="18" To="-3" />
             <If Parameter="1087" EqualsTo="87" />
         </Set>
 </Rules> 

我想读取此XML文件并将其转换为数据帧:

Parameter<Set>       Parameter<If>
4                     1087
5                     1087
6                     1087
14                    1087
15                    1087
16                    1087
17                    1087
18                    1087

这是我已经尝试过的,但是我遇到了一些错误,可能有一种更有效的方法来完成这项任务:

import xml.etree.ElementTree as ET
import pandas as pd
import os

def getMetrics(file_name):
    path="C:\\Users\Z003Z9CF\Downloads"
    os.chdir(path)
    tree = ET.parse('sample1.xml')
    print(tree)
    root = tree.getroot()
    print(root.tag)
    result = []
    for setnode in root.iter('Set'):                         
        node = setnode.attrib["Parameter"]  
        for ifnode in setnode:                              
        if "Parameter" in ifnode.attrib:
            result.append(dict(node=node, parameter=ifnode.attrib.get("Parameter")))
                    return result 

df = pd.DataFrame(getMetrics('sample1.xml'), columns["Parameter","Parameter"])          
print(df)

Tags: toinimportnodetreeifparameterroot
1条回答
网友
1楼 · 发布于 2024-04-19 05:01:35

首先你调用的方法和函数返回是错误的。您定义了只接受一个参数的函数,并发送了两个参数。同样显示的输出根据你的xml也是错误的。你知道吗

输出应符合xml

4                     1087
5                     1087
6                     1087
18                    1087

在这里,我调试和纠正你的功能错误,在我的本地设置这是工作良好。你知道吗

import xml.etree.ElementTree as ET
import pandas as pd


def getMetrics(file_name):
    tree = ET.parse(file_name)
    root = tree.getroot()
    result = []
    for setnode in root.iter('Set'):
        node = setnode.attrib["Parameter"]
        for ifnode in setnode:
            if "Parameter" in ifnode.attrib:
                result.append(dict(node=node, parameter=ifnode.attrib.get("Parameter")))

    return result


df = pd.DataFrame(getMetrics('sample.xml'))
print(df)

您的xml文件应如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Rules>
    <Set Parameter="4" To="90">
         <If Parameter="1087" EqualsTo="90" />
    </Set>
    <Set Parameter="5" To="-5">
         <If Parameter="1087" EqualsTo="87" />
    </Set>
    <Set Parameter="6" To="[-5,23;36,7;58,7;78,8;94,47]">
         <If Parameter="1087" EqualsTo="87" />
     </Set>
     <Set Parameter="14" To="7,5" />
     <Set Parameter="15" To="-7,5" />
     <Set Parameter="16" To="0,5" />
     <Set Parameter="17" To="3" />
     <Set Parameter="18" To="-3" >
         <If Parameter="1087" EqualsTo="87" />
     </Set>
</Rules>

相关问题 更多 >