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

标签 python generator google-scholar

我正在使用 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 数据框?

最佳答案

这不是生成器问题。生成器生成的对象不是字典

诚然,scholary 库不会通过给 Author 实例提供类似字典的字符串转换来帮助解决问题,而不是实际记录该类的 API 确实支持。

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

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

可以使用 vars() function 获取对象的字典:

author_dict = vars(author)

不过,数据不一定直接映射到数据框。例如,interests 列表如何在 dataframe 表格数据结构中表示?而且您也不想包含 _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 页的结果。

关于Python:如何访问生成器对象中的元素并将它们放入 Pandas 数据框或字典中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57167543/

相关文章:

python - Boto3 更新多个值

Javascript ES6 生成器异步

python - 使用 Python(或 R)提取谷歌学术搜索结果

java - 用于根据检测到的特征确定对象中心的成本/映射函数

python - 尝试安装 discord.py,它说 "no module named pip"

python - 存储出勤数据的最有效或最有用的方法是什么?

php - PHP 中的产量是什么意思?

python - 空发电机

Java 网络爬虫看到验证码

python - 使用 tor 和 python 抓取谷歌学术搜索