Я пытаюсь импортировать этот файл из IESO в python, преобразовав его в фрейм данных Pandas.Я могу распечатать dtypes (которые являются всеми объектами), однако я не могу получить доступ или распечатать данные правильно.Кто-нибудь имеет представление о том, что я сделал неправильно?
Вот код, который я использовал, вдохновленный найденным мной онлайн-ресурсом:
import requests
# Gather XML Data
user_agent_url = 'http://reports.ieso.ca/public/OntarioZonalDemand/PUB_OntarioZonalDemand_20180824.xml'
xml_data = requests.get(user_agent_url).content
# Parse XML Data
import xml.etree.ElementTree as ET
import pandas as pd
class XML2DataFrame:
def __init__(self,xml_data):
self.root = ET.XML(xml_data)
# Return a list of dictionaries from the text and attributes of the childen under this XML root
def parse_root(self,root):
return[self.parse_element(child) for child in iter(root)]
# Collect {key:attribute} and {tag:text} from this XML element and all its children into a single dictionary of strings.
def parse_element(self,element,parsed=None):
if parsed is None:
parsed = dict()
for key in element.keys():
if key not in parsed:
parsed[key] = element.attrib.get(key)
else:
raise ValueError('duplicate attribute {0} at element {1}'.format(key,element.getroottree().getpath(element)))
if element.text:
parsed[element.tag] = element.text
# Apply recursion
for child in list(element):
self.parse_element(child,parsed)
return parsed
# Initiate the root XML, parse it, and return a dataframe
def process_data(self):
structure_data = self.parse_root(self.root)
return pd.DataFrame(structure_data)
xml2df = XML2DataFrame(xml_data)
xml_dataframe = xml2df.process_data()
#print(xml_dataframe.dtypes)
with pd.option_context('display.max_rows', None, 'display.max_columns', None):
print(xml_dataframe)