Преобразование XML в pandas фрейм данных - PullRequest
1 голос
/ 08 мая 2020

Я хочу преобразовать 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>

Ответы [ 2 ]

1 голос
/ 25 августа 2020

Я сделал пакет для аналогичного варианта использования. Это может сработать и здесь.

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)
1 голос
/ 08 мая 2020

Вы можете использовать xmltodict для синтаксического анализа вашего XML и затем создания фрейма данных.

Попробуйте следующее:

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 и поменять все круглые скобки (") на одиночные (').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...