У меня есть этот XML и я хочу, чтобы разобрать в кадр данных панды:Синтаксический XML для dataframe в питона с теми же узлами
<DISTRITO xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NOME_DISTRITO>BRAGANCA</NOME_DISTRITO>
<CPE>PT0002000022161425NP</CPE>
<CPE>PT0002000022161458JH</CPE>
<CPE>PT0002000022161471ZP</CPE>
<CPE>PT0002000022161505SL</CPE>
</DISTRITO>
и это мой код Python:
from lxml import objectify
from lxml import etree
import pandas as pd
path = '/TestFile.xml'
xml = objectify.parse(open(path))
root = xml.getroot()
data = []
for i in root:
el_data = {}
for child in root.getchildren():
el_data[child.tag] = child.pyval
# print el_data
data.append(el_data)
df = pd.DataFrame(data)
Проблема заключается в том что, когда я получаю результат он возвращает только последний узел «» значение:
CPE NOME_DISTRITO
0 PT0002000022161505SL BRAGANCA
1 PT0002000022161505SL BRAGANCA
2 PT0002000022161505SL BRAGANCA
3 PT0002000022161505SL BRAGANCA
4 PT0002000022161505SL BRAGANCA
Я копал немного в мой файл XML и я нашел что это происходит, когда я получаю одинаковые имена для узлов. Например, если бы мой файл был таким:
<DISTRITO xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NOME_DISTRITO>BRAGANCA</NOME_DISTRITO>
<CPE1>PT0002000022161425NP</CPE1>
<CPE2>PT0002000022161458JH</CPE2>
<CPE3>PT0002000022161471ZP</CPE3>
<CPE4>PT0002000022161505SL</CPE4>
</DISTRITO>
не было проблем. Я много искал, но я не могу найти решение. Поэтому, если вы можете мне помочь и попытаться найти другой способ разобрать этот файл, потому что я не могу заставить его работать правильно.
Спасибо, ребята!
Спасибо за ваш ответ. Я просто хочу немного разобраться в etree, объективировать и вообще как разбирать XML в кадре данных с Python. У меня огромный XML-файл, и я хочу преобразовать его в табличный файл для лучшего чтения. Благодаря!! Вы мне очень помогли. :) –
@JulianaRivera, без проблем, пожалуйста. –