首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BioPython KeyError

BioPython KeyError
EN

Stack Overflow用户
提问于 2019-12-11 01:24:51
回答 1查看 335关注 0票数 1

我是一名资料科学入门班的学生,对编程有初学者的知识。我正在运行Python3.7.4(缺省值,2019,18:34:13) MSC v.1915 64位(AMD64) ::Anaconda,Inc. . on win32,并使用Pycharm作为我的IDE。我正在构建一个使用BioPython的网页刮刀器,然后将结果保存在一个数据文件中。

抓取代码如下:

代码语言:javascript
复制
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)

然后,为了保存到数据文件,我有以下内容:

代码语言:javascript
复制
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

我的问题变成..。当搜索函数中的retmax参数仅为15时,它就能正常工作。我得到了15张记录,我需要填写所有4条信息。但是,当我将它更改为16时,我会得到一个错误。

回溯(最近一次调用):文件"C:/Users/lztp/Documents/UT/1_PHM_2193_Intro_to_Data_Science/PyCharm_Projects/FP_Crawler_Module_1.py",第69行,在pbyr =纸张‘Medline引文’‘Journal’PubDate‘KeyError:'Year’

我的理解是它的意思是“年”在下一个记录中不存在?如何让它跳过缺失值的记录,只保存那些具有我需要的值的记录?在搜索中,我尝试在术语参数中使用过滤器,但得到了另一个错误。有没有一种检查值是否为空的方法?或者,如果有人对如何做这件事有想法,我们会非常感激的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-11 01:46:29

代码语言:javascript
复制
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))

只要用试抓来处理就行了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59277658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档