将xml数据转换为数据框

时间:2019-02-07 05:17:35

标签: python xml

让我们假设我有一个像这样的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文件并将其转换为pandas DataFrame:

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)

1 个答案:

答案 0 :(得分:0)

首先,您调用方法和函数返回错误。您定义了仅接受一个参数并发送两个参数的函数。同样根据您的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>
相关问题