Хранение данных XML в фрейме данных Pandas

Расширяемый язык разметки (XML) - это язык разметки, который кодирует данные в формате, удобочитаемом человеком и компьютером. XML используется во множестве программ для структурирования, хранения и передачи данных. Python содержит несколько интерфейсов для обработки XML-данных. В этом посте мы обсудим, как использовать модуль «ElementTree» в библиотеке python «xml» для анализа данных XML и сохранения данных во фрейме данных Pandas.
Давайте начнем!
Для наших целей мы будем использовать образец файла xml, books.xml, который можно найти здесь. Файл содержит информацию о различных книгах, например названия, имена авторов и цены.
Для начала давайте импортируем «синтаксический анализ» из модуля «ElementTree» в библиотеке python «xml»:
from xml.etree.ElementTree import parse
Теперь давайте посмотрим на теги файлов в файле "books.xml":

Мы можем определить проанализированный объект документа «XML», передав имя файла в метод «parse ()»:
document = parse('books.xml')
Если мы распечатываем объект, мы видим, что у нас есть объект «ElementTree» по указанному адресу памяти:
print(document)

Давайте посмотрим на методы и атрибуты, доступные для этого объекта, с помощью встроенного метода dir ():
print(dir(document))

Давайте воспользуемся методом iterfind (), чтобы вернуть генератор, который мы можем использовать для перебора в цикле for. Нам нужно будет указать аргумент пути в методе iterfind (). Выберем путь «книга»:
for item in document.iterfind(‘book’):
print(item)

Мы видим, что у нас есть несколько объектов «Элементной книги», хранящихся по разным адресам памяти. Мы можем извлечь информацию из этих объектов с помощью метода findtext (). Давайте извлечем информацию из тегов «автор»:
for item in document.iterfind('book'):
print(item.findtext('author'))

Мы также можем извлекать заголовки:
for item in document.iterfind('book'):
print(item.findtext('title'))

Также посмотрим на цены:
for item in document.iterfind('book'):
print(item.findtext('price'))

Затем мы можем инициализировать списки, которые мы можем использовать для хранения этих значений:
author = [] title = [] price = []
А внутри цикла for мы можем добавить значения:
for item in document.iterfind('book'):
author.append(item.findtext('author'))
title.append(item.findtext('title'))
price.append(item.findtext('price'))
Затем мы можем сохранить эти списки во фрейме данных. Давайте сначала импортируем библиотеку Pandas:
import pandas as pd
Затем давайте определим фрейм данных, который будет содержать «название», «автор» и «цену» для каждой книги:
df = pd.DataFrame({'title': title, 'author':author, 'price':price})
Затем напечатаем получившийся фрейм данных:
print(df)

Мы также можем добавить во фрейм данных «жанр», «публикацию_даты» и «описание»:
genre = []
description = []
publish_date = []
for item in document.iterfind('book'):
...
genre.append(item.findtext('genre'))
description.append(item.findtext('description'))
publish_date.append(item.findtext('publish_date'))

Теперь, когда у нас есть вся информация во фрейме данных, мы можем делать такие вещи, как преобразовывать строки «цена» в «float» и вычислять среднее значение столбца «цена»:
df['price'] = df['price'].astype(float)
print("Mean price: ", df['price'].mean())

Давайте также преобразуем «publish_date» в объект «datetime» и извлечем значения года, месяца и дня:
df['publish_date'] = pd.to_datetime(df['publish_date']) df['year'] = df['publish_date'].dt.year df['month'] = df['publish_date'].dt.month df['day'] = df['publish_date'].dt.day print(df.head())

Мы также можем использовать метод Counter () из модуля коллекций, чтобы посмотреть распределение по авторам и жанрам:
from collections import Counter print(Counter(df['author'])) print(Counter(df['genre']))

На этом я остановлюсь, но вы можете поиграть с данными и написать код самостоятельно.
ВЫВОДЫ
Подводя итог, в этом посте мы обсудили, как анализировать данные XML с помощью библиотеки xml в Python. Мы показали, как использовать метод iterfind () для определения объекта-генератора, который мы можем перебирать в цикле for. Мы также показали, как получить доступ к информации тега элемента с помощью метода findtext (). Затем мы сохранили информацию XML в списках, которые использовали для определения фрейма данных Pandas. Надеюсь, вы нашли этот пост полезным / интересным. Данные и код из этого поста доступны на GitHub. Спасибо за чтение!