Python: 如何访问生成器对象中的元素并将它们放入 Pandas 数据框或字典中?
Python: How to access the elements in a generator object and put them in a Pandas dataframe or in a dictionary?
我正在使用 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']
它时 returns TypeError: 'Author' object is not subscriptable
.
我的问题是如何访问生成器对象中的元素?以及如何将该对象转换为 Pandas 数据框?
这不是生成器问题。生成器生成的对象不是字典。
诚然,scholary
库不会给 Author
实例提供 dictionary-like 字符串转换,而不会实际记录 API class 支持。
Author
表示中的每个'keys'实际上是对象的一个属性:
author = next(search_query)
print(author.citedby)
您可以通过使用 vars()
function:
获取对象的字典
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 值或类似值的单独列。
请注意,这将是 缓慢的 ,因为 scholarly
库页面按顺序通过 Google 搜索结果,而库 故意延迟请求,每次随机休眠间隔为5-10秒,以避免Google阻塞请求。所以您必须要有耐心,因为 Python
关键字搜索很容易产生将近 30 页的结果。
我正在使用 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']
它时 returns TypeError: 'Author' object is not subscriptable
.
我的问题是如何访问生成器对象中的元素?以及如何将该对象转换为 Pandas 数据框?
这不是生成器问题。生成器生成的对象不是字典。
诚然,scholary
库不会给 Author
实例提供 dictionary-like 字符串转换,而不会实际记录 API class 支持。
Author
表示中的每个'keys'实际上是对象的一个属性:
author = next(search_query)
print(author.citedby)
您可以通过使用 vars()
function:
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 值或类似值的单独列。
请注意,这将是 缓慢的 ,因为 scholarly
库页面按顺序通过 Google 搜索结果,而库 故意延迟请求,每次随机休眠间隔为5-10秒,以避免Google阻塞请求。所以您必须要有耐心,因为 Python
关键字搜索很容易产生将近 30 页的结果。