【问题标题】:BioPython KeyErrorBioPython KeyError
【发布时间】:2019-12-11 01:24:51
【问题描述】:

我是一名 MPH 学生,正在学习 INTRO to Data Science 课程,并且具备编程的初学者知识。我在 win32 上运行 Python 3.7.4(默认,2019 年 8 月 9 日,18:34:13)[MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc.,并使用 Pycharm 作为我的 IDE。我正在使用 BioPython 构建一个网络爬虫,然后将结果保存在数据框中。
抓取的代码是这样的:

from Bio import Entrez
import pandas

# gives a list of Citation IDs in response to a search word
def search(query):
    Entrez.email = 't@gmail.com'
    handle = Entrez.esearch(db='pubmed',
                            sort='relevance',
                            retmax='15',
                            retmode='xml',
                            datatype = 'pdat',
                            mindate = '2001/01/01',
                            maxdate = '2010/01/01',
                            term=(query)
                            )
    results = Entrez.read(handle)
    return results

# Fetch the details for all the retrieved articles via the fetch utility.
def fetch_details(id_list):
    ids = ','.join(id_list)
    Entrez.email = 't@gmail.com'
    handle = Entrez.efetch(db='pubmed',
                           retmode='xml',
                           id=ids)
    results = Entrez.read(handle)
    return results

if __name__ == '__main__':
    results = search('fever')
    id_list = results['IdList']
    papers = fetch_details(id_list)

然后保存到数据框,我有这个:

pmid = []
title = []
pubyear = []
abstract = []

for i, paper in enumerate(papers['PubmedArticle']):
    pm = paper['MedlineCitation']['PMID']
    pmid.append(str(pm))
    tit = paper['MedlineCitation']['Article']['ArticleTitle']
    title.append(tit)
    pbyr = paper['MedlineCitation']['Article']['Journal']['JournalIssue']['PubDate']['Year']
    pubyear.append(pbyr)
    ab = paper['MedlineCitation']['Article']['Abstract']['AbstractText']
    str(ab)
    abstract.append(str(ab))

# create empty dataframe
paper_df = pandas.DataFrame()

# add the PMID, Title, Publication Year, and Abstract columns
paper_df['Article_PMID'] = pmid
paper_df['Article_Title'] = title
paper_df['Publication_Year'] = pubyear
paper_df['Article_Abstract'] = abstract

我的问题变成了......当我在 esearch 函数中的 retmax 参数只有 15 时,它工作得很好。我得到 15 条记录,我需要填写所有 4 条信息。 但是,当我将其更改为 16 时,出现错误。

Traceback(最近一次调用最后一次): 文件“C:/Users/lztp/Documents/UT/1_PHM_2193_Intro_to_Data_Science/PyCharm_Projects/FP_Crawler_Module_1.py”,第 69 行,在 pbyr = 论文['MedlineCitation']['Article']['Journal']['JournalIssue']['PubDate']['Year'] KeyError: '年份'

我的理解是这意味着下一条记录中不存在“年份”? 我怎样才能让它跳过缺少值的记录,只保存那些具有我需要的值的记录? 我尝试在 esearch 的 term 参数中使用过滤器,但又遇到了另一个错误。 有没有办法检查值是否为空?或者,如果有人对如何执行此操作有任何想法,将不胜感激。

【问题讨论】:

    标签: python biopython pubmed


    【解决方案1】:
    for i, paper in enumerate(papers['PubmedArticle']):
        try:
            pm = paper['MedlineCitation']['PMID']
            tit = paper['MedlineCitation']['Article']['ArticleTitle']
            pbyr = paper['MedlineCitation']['Article']['Journal']['JournalIssue']['PubDate']['Year']
            ab = paper['MedlineCitation']['Article']['Abstract']['AbstractText']
        except KeyError as e:
            continue
        pmid.append(str(pm))
        title.append(tit)
        pubyear.append(pbyr)
        abstract.append(str(ab))
    

    只需使用 try-catch 来处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 2012-05-13
      • 2013-05-03
      • 1970-01-01
      相关资源
      最近更新 更多