繁体   English   中英

将 XML 转换为 pandas dataframe

[英]Convert XML to pandas dataframe

我想将 XML 转换为 pandas DataFrame。 我使用ElementTree库来解析 XML。

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

xtree = et.parse('xmlfile.xml)
xroot = xtree.getroot() 

[elem.tag for elem in xroot.iter()]

如何访问每个标签的值,以便将 XML 转换为 pandas dataframe?

Dataframe 应如下所示:

数据框

以下面的XML为例,你能想出一些Python代码来实现上面的DataFrame吗?

<?xml version="1.0" encoding="UTF-8"?>

<!-- Deze grammatica wordt niet meer gebruikt. Gebruik voortaan FMPXMLRESULT. -->

-<FMPDSORESULT xmlns="http://www.filemaker.com/fmpdsoresult">

<ERRORCODE>0</ERRORCODE>

<DATABASE>FrontEnd.fmp12</DATABASE>

<LAYOUT/>


-<ROW RECORDID="183122" MODID="0">

<identificatie>GAC</identificatie>

<naam>sample_naam_1</naam>

<wachtwoord>ww</wachtwoord>

<kenmerk>km</kenmerk>

<timestamp>30-4-2020 13:51:05</timestamp>

<berichtversie>1.0</berichtversie>

<analysecode>BST200428</analysecode>

<datum>30-4-2020</datum>

<datumontvangst>28-4-2020</datumontvangst>


</ROW>


-<ROW RECORDID="183123" MODID="0">

<identificatie>GAC</identificatie>

<naam>sample_naam_2</naam>

<wachtwoord>ww</wachtwoord>

<kenmerk>km</kenmerk>

<timestamp>30-4-2020 13:51:05</timestamp>

<berichtversie>1.0</berichtversie>

<analysecode>BST200429</analysecode>

<datum>30-4-2020</datum>

<datumontvangst>28-4-2020</datumontvangst>


</ROW>

</FMPDSORESULT>

我已经为类似的用例制作了 package。 它也可以在这里工作。

pip install pandas_read_xml

你可以做类似的事情

import pandas_read_xml as pdx

df = pdx.read_xml('filename.xml', ['FMPDSORESULT'])

为了展平,你可以

df = pdx.flatten(df)

或者

df = pdx.fully_flatten(df)

您可以使用xmltodict解析您的 XML,然后创建 dataframe。

尝试这个:

import pandas as pd
import xmltodict

data = """
<?xml version='1.0' encoding='UTF-8'?>
<FMPDSORESULT xmlns='http://www.filemaker.com/fmpdsoresult'>
<ERRORCODE>0</ERRORCODE>
<DATABASE>FrontEnd.fmp12</DATABASE>
<LAYOUT/>
<ROW RECORDID='183122' MODID='0'>
<identificatie>GAC</identificatie>
<naam>sample_naam_1</naam>
<wachtwoord>ww</wachtwoord>
<kenmerk>km</kenmerk>
<timestamp>30-4-2020 13:51:05</timestamp>
<berichtversie>1.0</berichtversie>
<analysecode>BST200428</analysecode>
<datum>30-4-2020</datum>
<datumontvangst>28-4-2020</datumontvangst>
</ROW>
<ROW RECORDID='183123' MODID='0'>
<identificatie>GAC</identificatie>
<naam>sample_naam_2</naam>
<wachtwoord>ww</wachtwoord>
<kenmerk>km</kenmerk>
<timestamp>30-4-2020 13:51:05</timestamp>
<berichtversie>1.0</berichtversie>
<analysecode>BST200429</analysecode>
<datum>30-4-2020</datum>
<datumontvangst>28-4-2020</datumontvangst>
</ROW>
</FMPDSORESULT>
"""

parsed = xmltodict.parse(data.strip())
df = pd.DataFrame(parsed["FMPDSORESULT"]["ROW"])
display(df)

这打印出来:

    @RECORDID   @MODID  identificatie   naam    wachtwoord  kenmerk     timestamp   berichtversie   analysecode     datum   datumontvangst
0   183122  0   GAC     sample_naam_1   ww  km  30-4-2020 13:51:05  1.0     BST200428   30-4-2020   28-4-2020
1   183123  0   GAC     sample_naam_2   ww  km  30-4-2020 13:51:05  1.0     BST200429   30-4-2020   28-4-2020

请注意,我必须进一步清理您的 XML 并将所有括号( " )交换为单个括号( ' )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM