У меня есть несколько файлов xml
из PubMed. Несколько файлов здесь.
Как разобрать его и получить эти столбцы в одном кадре данных. Если у статьи несколько авторов, я хочу, чтобы они были отдельными строками.
Ожидаемый результат (должны быть включены все авторы):
Title Year ArticleTitle LastName ForeName
Nature 2021 Inter-mosaic ... Roy Suva
Nature 2021 Inter-mosaic ... Pearson John
Nature 2021 Neural dynamics Pearson John
Nature 2021 Neural dynamics Mooney Richard
@JackFleeting, обновил код. Спасибо за это!
Во-первых, то, что вы хотите, выполнимо. Что-то вроде этого должно работать для вашего второго файла, и вы можете добавить другие файлы, обернув код циклом for
:
from lxml import etree
import pandas as pd
doc = etree.parse('file.xml')
columns = ['Title','ArticleDate','ArticleTitle','LastName','ForeName']
title = doc.xpath(f'//{columns[0]}/text()')[0]
year = doc.xpath(f'//{columns[1]}//Year/text()')[0]
article_title = doc.xpath(f'//{columns[2]}/text()')[0]
rows = []
for auth in doc.xpath('//Author'):
last_name = auth.xpath(f'{columns[3]}/text()')[0]
fore_name = auth.xpath(f'{columns[4]}/text()')[0]
rows.append([title,year,article_title,last_name,fore_name])
pd.DataFrame(rows,columns=columns)
Вывод (для 34671166.xml):
Title ArticleDate ArticleTitle LastName ForeName
0 Nature 2021 Neural dynamics underlying birdsong practice a... Singh Alvarado Jonnathan
1 Nature 2021 Neural dynamics underlying birdsong practice a... Goffinet Jack
2 Nature 2021 Neural dynamics underlying birdsong practice a... Michael Valerie
3 Nature 2021 Neural dynamics underlying birdsong practice a... Liberti William
4 Nature 2021 Neural dynamics underlying birdsong practice a... Hatfield Jordan
5 Nature 2021 Neural dynamics underlying birdsong practice a... Gardner Timothy
6 Nature 2021 Neural dynamics underlying birdsong practice a... Pearson John
7 Nature 2021 Neural dynamics underlying birdsong practice a... Mooney Richard
Сказав все это, я не уверен, что фрейм данных с каждым автором в отдельной строке - лучшая идея для типа данных, которые у вас есть. В этом примере, поскольку у вас есть 8 соавторов, такая информация, как название статьи, повторяется без необходимости 8 раз. Вы можете дать каждому автору отдельный набор столбцов, но тогда у вас будут проблемы, когда у статей 3 или 10 соавторов...
Спасибо за ваше время и усилия! Я буду работать с вашим кодом! Хорошего дня!
Ваш ожидаемый результат не ясен. Возьмем ваш первый xml-файл: у него есть несколько авторов — какой точно является ожидаемым результатом этого фактического файла?