Python:如何访问生成器对象中的元素并将它们放入 Pandas 数据框或字典中?

2024-04-09

我正在使用scholarlypython 中的模块用于搜索关键字。我正在返回一个生成器对象,如下所示:

import pandas as pd
import numpy as np
import scholarly

search_query = scholarly.search_keyword('Python')
print(next(search_query))

{'_filled': False,
 'affiliation': 'Juelich Center for Neutron Science',
 'citedby': 75900,
 'email': '@fz-juelich.de',
 'id': 'zWxqzzAAAAAJ',
 'interests': ['Physics', 'C++', 'Python'],
 'name': 'Gennady Pospelov',
 'url_picture': 'https://scholar.google.com/citations?view_op=medium_photo&user=zWxqzzAAAAAJ'}

我想访问元素“citedby”,但是当我尝试这样做时next(search_query)['citedby']它返回TypeError: 'Author' object is not subscriptable.

我的问题是如何访问生成器对象中的元素?以及如何将该对象转换为 Pandas 数据框?


这不是发电机问题。生成器生成的对象是不是字典.

诚然,scholary图书馆并没有通过提供帮助解决问题Author给你一个类似字典的字符串转换的实例,但实际上并没有记录该类的 APIdoes支持。

中的每个“键”Author表示实际上是一个属性在物体上:

author = next(search_query)
print(author.citedby)

You can使用以下方法获取对象的字典vars()功能 https://docs.python.org/3/library/functions.html#vars:

author_dict = vars(author)

不过,数据不一定直接映射到数据帧。将如何interests例如,列表可以在数据框表格数据结构中表示?而且你不想包括_filled内部属性(这是一个记录如果author.fill()已被调用)。

也就是说,您可以通过将生成器映射到vars功能:

search_query = scholarly.search_keyword('Python')
df = pd.DataFrame(map(vars, search_query))

然后放下_filled如有必要,请转换列interests将列转换为更结构化的内容,例如具有 0 / 1 值或类似值的单独列。

请注意,这将是slow,因为scholarly按顺序浏览 Google 搜索结果的图书馆页面,以及图书馆故意地每次以 5-10 秒的随机睡眠间隔延迟请求,以避免 Google 阻止请求。所以你必须要有耐心Python关键字搜索轻松产生近 30 页的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:如何访问生成器对象中的元素并将它们放入 Pandas 数据框或字典中? 的相关文章

随机推荐