преобразовать проанализированный XML с вложенным дочерним тегом и отсутствующими дочерними тегами в контейнере в кадр данных Pandas - PullRequest
0 голосов
/ 24 сентября 2019

Мой пример XML:

<RecordContainer RecordNumber = "1">
<catalog>
   <book id="bk101">
      <person>
         <author>Gambardella, Matthew</author>
         <personal_info>
            <age>40</age>
         </personal_info> 
      </person>
      <title>XML Developer's Guide</title>
      <description>
          <price>44.95</price>
          <publish_date>2000-10-01</publish_date>
      </description>
      <details> 
          <info>this is the guide to XML</info>
      </details>
   </book>
 </catalog>
</RecordContainer>
<RecordContainer RecordNumber = "2">
 <catalog>  
   <book id="bk102">
      <person>
        <author>Ralls, Kim</author>
      </person>
      <title>Midnight Rain</title>
      <genre>Fantasy</genre>
      <description>
        <price>5.95</price>
        <publish_date>2000-12-16</publish_date>
      </description>
   </book>
</catalog>
</RecordContainer>

Обратите внимание, что выше XML есть вложенные дочерние теги, а некоторые из вложенных тегов отсутствуют в некоторых контейнерах.

Мой ожидаемый вывод - pandas dataframeсо всеми тегами и заполнить ноль в случае пропущенного текста тега.

код для анализа данных:

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

root = ET.fromstring("<root>"+ sample_data + "</root>")

records = []
containers = root.findall('.//RecordContainer')
for container in containers:
    entry = container.attrib
    book = container.find('.//catalog/book')
    entry.update(book.attrib)
    for child in list(book):
        entry[child.tag] = child.text
    records.append(entry)

df = pd.DataFrame(records)

Приведенный выше код возвращает ноль в случае отсутствия тегов, и он не выровненс именем столбца.

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