DataFrame из XML в Pandas возвращает None - PullRequest
0 голосов
/ 16 марта 2019

Я начинаю с науки о данных и панд. Я пытаюсь заполнить информационный фрейм панд XML-информацией. Вот мой код:

import xml.etree.cElementTree as et
import pandas as pd
import sys

def getvalueofnode(node):
    """ return node text or None """
    return node.text if node is not None else None


def main():
    parsed_xml = et.parse("test2.xml")
    dfcols = ['Country','Club', 'Founded']
    df_xml = pd.DataFrame(columns=dfcols)

    for node in parsed_xml.getroot():
        Country = node.attrib.get('country')
        Club = node.find('Name')
        Founded = node.find('Founded')

        df_xml = df_xml.append(
            pd.Series([Country, getvalueofnode(Club),getvalueofnode(Founded)], index=dfcols),
            ignore_index=True)

    print(df_xml)

main()

Вот мой вывод:

Загородный клуб основан

0 Нет Нет Нет Нет

Вот мой XML-файл:

<?xml version="1.0"?>
<SoccerFeed timestamp="20181123T153249+0000">
  <SoccerDocument Type="SQUADS Latest" competition_code="FR_L1" competition_id="24" competition_name="French Ligue 1" season_id="2016" season_name="Season 2016/2017">
    <Team country="France" country_id="8" country_iso="FR" region_id="17" region_name="Europe" >
      <Founded>1919</Founded>
      <Name>Angers</Name>
   <...>
   <Team country="France" country_id="8" country_iso="FR" region_id="17" region_name="Europe" >
      <Founded>1905</Founded>
      <Name>Bastia</Name>

Почему я не могу получить фрейм данных Pandaс информацией мне нужно?Я что-то пропустил в своем коде?Спасибо за вашу помощь

1 Ответ

0 голосов
/ 16 марта 2019

В XML <Founded> и <Name> являются дочерними тегами для тега <Team>, а атрибут country также является частью тега <Team>.Следовательно, мы должны iter съесть над XML DOM тега <Team>.Далее, должен быть какой-то способ хранения значений цикла for на каждой итерации, поскольку это будут значения строк для каждого столбца.Мы можем сделать это, создав словарь (df_dict) из трех столбцов, значения которых будут равны пустым спискам.Мы добавляем соответствующие списки для каждого Country, Club и Founded на каждой итерации.Наконец, мы создаем Dataframe (df) из этого словаря.

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

def main():
    parsed_xml = et.parse("test.xml")
    df_dict = {'Country':[],'Club':[], 'Founded':[]}    
    root = parsed_xml.getroot()
    for country in root.iter('Team'):
        Country = country.attrib.get('country')
        Club = country.find('Name').text
        Founded = country.find('Founded').text 
        df_dict['Country'].append(Country)
        df_dict['Club'].append(Club)
        df_dict['Founded'].append(Founded) 

    print('Dict for dataframe: {}'.format(df_dict))
    df = pd.DataFrame(df_dict)
    print("Dataframe: \n{}".format(df))

main()

Ниже приведен вывод при запуске этого сценария:

#Output:
Dict for dataframe: {'Country': ['France', 'France'], 'Club': ['Angers', 'Bastia'], 'Founded': ['1919', '1905']}
Dataframe:
  Country    Club Founded
0  France  Angers    1919
1  France  Bastia    1905
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...