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

2024-10-06 08:59:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python中的scholarly模块来搜索关键字。我将返回生成器对象,如下所示:

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数据帧?在


Tags: 模块对象importnumpy元素pandassearchas
1条回答
网友
1楼 · 发布于 2024-10-06 08:59:33

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

诚然,scholary库并不能帮助您解决问题,因为它给您提供了一个类似字典的字符串转换的Author实例,而不是实际记录该类支持的API。在

Author表示中的每个“keys”实际上是对象上的一个属性

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

您可以使用^{} function获取对象的字典:

^{pr2}$

不过,数据不一定直接映射到数据帧。{cdr>在数据结构中如何表示?而且您也不想包含_filled内部属性(如果author.fill()被调用,这是一个要记录的标志)。在

也就是说,您可以通过映射vars函数从字典中创建一个数据帧:

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

然后根据需要删除_filled列,并将interests列转换为更结构化的列,例如具有0/1值或类似值的单独列。在

请注意,这将是缓慢的,因为scholarly库会按顺序浏览Google搜索结果,而库会故意延迟请求,每次随机睡眠间隔为5-10秒,以避免Google阻塞请求。因此您必须耐心等待,因为Python关键字搜索可以轻松生成近30页的结果。在

相关问题 更多 >