Извлечение XML во фрейм данных с родительским атрибутом в качестве заголовка столбца

У меня есть тысячи файлов XML, которые я буду обрабатывать, и они имеют схожий формат, но разные имена родителей и разное количество родителей. Через книги, Google, учебные пособия и просто пробуя коды, я смог извлечь все эти данные. Смотрите, например:При разборе фрейма данных xml на pandas возникает ошибка памяти а такжеДинамический поиск по атрибутам xml с использованием lxml и xpath в python

Тем не менее, я понял, что плохо извлекал данные, с дочерним «временем», повторяемым для каждого родителя.

Вот что я пытаюсь получить.

Time   blah   abc
1200   100   2
1300   30    4
1400   70    2

Вот что я знаю, как получить. Но мой текущий метод неуклюжий (я покажу ниже пример XML)

    child      Time   grandchild
0     blah     1200    100
1     blah     1300    30
...
n-2   abc      1200    2
n-1   abc      1300    4
n     abc      1400    2

Пример формата XML

<outer>
   <inner>
      <parent name = "blah" id = "1"> 
         <child Time = "1200"> 
            <grandchild>100</grandchild>  
         </child>
         <child Time = "1300">
            <grandchild>30</grandchild>
         </child>
         <child Time = "1400">
            <grandchild>70</grandchild>
         </child>
      </parent>
      <parent name = "abc" id = "2"> 
         <child Time = "1200">   
            <grandchild>2</grandchild> 
         </child>
         <child Time = "1300">
            <grandchild>4</grandchild>
         </child>
         <child Time = "1400">
            <grandchild>2</grandchild>
         </child>
      </parent>      
      <parent name = "1234" id = "7734"> 
         <other> 12 </other>
      </parent> 
   </inner>
</outer>

Вот как я могу получить мой вывод:

from lxml import etree, objectify
from pandas import *
dTime=[]
dparent = []
dgrandchild=[]
for df in root.xpath('/*/*/*/parent/child'):
    dparent.append(df.getparent().attrib['name'])
    ## Iterate over attributes of time for specific parent
    for attrib in df.attrib:
    dTime.append(df.attrib[attrib])
        ## grandchild is a child of time, and iterate
        subfields = df.getchildren()
        for subfield in subfields:
         dgrandchild.append(subfield.text)
df=DataFrame({'Parent': dparent,'Time':dTime,'grandchild':dgrandchld})

Я мог бы просто взять этот результат и изменить его, но это кажется неэффективным и очень неуклюжим подходом.

Я думаю, что мне нужно что-то из аромата:

#this does not work
data = []
for elem in root.xpath('/*/*/*/parent/child'):
   elem_data = {}
   for attrib in elem.attrib:
       elem_data['Time'] = elem.attrib[attrib])
   for child in elem.getchildren():
       elem_data[getparent().attrib['name'])] = child.text
       data.append(elem_data)
ndata = DataFrame(data)

Ответы на вопрос(1)

Ваш ответ на вопрос