從這樣的 xml 檔案中,我嘗試提取 pmid、nct_id 和發布型別。這里有四個示例檔案,一個有 NCT_ID。
<PMID Version="1">144418</PMID>
<PublicationType UI="D016428">Journal Article</PublicationType>
<AccessionNumber>NCT03070782</AccessionNumber>
理想情況下,我想要一個 pd 資料框:
預期輸出:
PMID Publication_type NCTID
1 Journal article NCT03070782
2 Journal article NaN
3 Journal article NaN
但是,如果有人至少能告訴我如何提取 1 個檔案,我也將不勝感激!我會弄清楚如何將它放入資料框中。
uj5u.com熱心網友回復:
使用
glob過的所有XML檔案迭代使用
BeautifulSoup決議XML內容使用
soup.find()和soup.find_all()查找 XML 中的元素用于
.text()從元素下的文本節點獲取字串使用
try和except為處理例外NCTID將內容存盤為 a
dict并附加到 alist用于從給定的
pd.DataFrame(<list>)創建dataframelist請注意,每個
PMID可能包含多個Publication_type,因此,用于explode()將 的串列拆分Publication_type為多行,參考PMID
代碼:
import pandas as pd
from glob import glob
from bs4 import BeautifulSoup
l = list()
for f in glob('*.xml'):
pub = dict()
with open(f, 'r') as xml_file:
xml = xml_file.read()
soup = BeautifulSoup(xml, "lxml")
pub['PMID'] = soup.find('pmid').text
pub_list = soup.find('publicationtypelist')
pub['Publication_type'] = list()
for pub_type in pub_list.find_all('publicationtype'):
pub['Publication_type'].append(pub_type.text)
try:
pub['NCTID'] = soup.find('accessionnumber').text
except:
pub['NCTID'] = None
l.append(pub)
df = pd.DataFrame(l)
df = df.explode('Publication_type', ignore_index=True)
輸出:
> PMID Publication_type NCTID > 0 144418 Journal Article None > 1 272056 English Abstract None > 2 272056 Journal Article None > 3 349115 Editorial None > 4 349115 Historical Article None > 5 31893580 Clinical Trial, Phase II NCT03070782 > 6 31893580 Journal Article NCT03070782 > 7 31893580 Multicenter Study NCT03070782 > 8 31893580 Randomized Controlled Trial NCT03070782 > 9 31893580 Research Support, Non-U.S. Gov't NCT03070782
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/389424.html
