首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我尝试从PubMed上的查询中获取所有文章详细信息到Pandas DataFrame并将它们全部导出到CSV时

当我尝试从PubMed上的查询中获取所有文章详细信息到Pandas DataFrame并将它们全部导出到CSV时
EN

Stack Overflow用户
提问于 2020-12-05 01:36:03
回答 1查看 178关注 0票数 0
代码语言:javascript
复制
from pymed import PubMed
pubmed = PubMed(tool="PubMedSearcher", email="daspranab239@gmail.com")
search_term = "Your search term"
results = pubmed.query(search_term, max_results=500)
articleList = []
articleInfo = []
for article in results:

打印我们找到的对象类型(可以是PubMedBookArticle或PubMedArticle)。我们需要将其转换为具有可用功能的字典

代码语言:javascript
复制
    articleDict = article.toDict()
    articleList.append(articleDict)

生成包含可从PUBMED API获取的所有文章详细信息的dict记录列表

代码语言:javascript
复制
for article in articleList:

#有时文章‘’pubmed_id‘包含用逗号分隔的列表-取该列表中的第一个pubmedId -那就是文章pubmedId

代码语言:javascript
复制
    pubmedId = article['pubmed_id'].partition('\n')[0]

将文章信息追加到词典

代码语言:javascript
复制
    articleInfo.append({u'pubmed_id':pubmedId,
                   u'title':article['title'],
                   u'keywords':article['keywords'],
                   u'journal':article['journal'],
                   u'abstract':article['abstract'],
                   u'conclusions':article['conclusions'],
                   u'methods':article['methods'],
                   u'results': article['results'],
                   u'copyrights':article['copyrights'],
                   u'doi':article['doi'],
                   u'publication_date':article['publication_date'], 
                   u'authors':article['authors']})

从字典列表生成Pandas DataFrame

代码语言:javascript
复制
articlesPD = pd.DataFrame.from_dict(articleInfo)

articlesPD

当我尝试执行上面的代码时,我得到了KeyError:‘关键字’,‘日志’,‘结论’,..等。

EN

回答 1

Stack Overflow用户

发布于 2020-12-05 02:44:02

根据以下代码,article不是dict,而是instance,因此字段应该由get或括号[]以外的.访问

参考https://github.com/gijswobben/pymed/blob/master/pymed/article.py#L124

代码语言:javascript
复制
class PubMedArticle(object):

    def _initializeFromXML(self: object, xml_element: TypeVar("Element")) -> None:
        """ Helper method that parses an XML element into an article object.
        """

        # Parse the different fields of the article
        self.pubmed_id = self._extractPubMedId(xml_element)
        self.title = self._extractTitle(xml_element)
        self.keywords = self._extractKeywords(xml_element)
        self.journal = self._extractJournal(xml_element)
        self.abstract = self._extractAbstract(xml_element)
        self.conclusions = self._extractConclusions(xml_element)
        self.methods = self._extractMethods(xml_element)
        self.results = self._extractResults(xml_element)
        self.copyrights = self._extractCopyrights(xml_element)
        self.doi = self._extractDoi(xml_element)
        self.publication_date = self._extractPublicationDate(xml_element)
        self.authors = self._extractAuthors(xml_element)
        self.xml = xml_element

以下内容可能会有所帮助。

代码语言:javascript
复制
from pymed import PubMed

import json

pubmed = PubMed(tool="PubMedSearcher", email="daspranab239@gmail.com")
search_term = "Your search term"
results = pubmed.query(search_term, max_results=500)
articleList = []
articleInfo = []


def get_data(article, name):
    return getattr(article, 'name', 'N/A')


for article in results:
    pubmedId = article.pubmed_id.partition('\n')[0]

    articleInfo.append({
        u'pubmed_id': pubmedId,
        u'title': article.title,
        u'keywords': get_data(article, 'keywords'),
        u'journal': get_data(article, 'journal'),
        u'abstract': article.abstract,
        u'conclusions': get_data(article, 'conclusions'),
        u'methods': get_data(article, 'methods'),
        u'results': get_data(article, 'results'),
        u'copyrights': article.copyrights,
        u'doi': article.doi,
        u'publication_date': article.publication_date,
        u'authors': article.authors})


print(json.dumps(articleInfo, indent=4, default=str))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65148151

复制
相关文章

相似问题

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