python - 我使用什么函数来遍历 URL 参数并将其显示在 Pandas 数据框中?
问题描述
我一直在使用 Requests 和 Pandas 做一些 API 请求。现在我正在尝试使用 for 循环来遍历 URL 参数列表。当我使用 print() 进行测试时,我得到了整个列表的 JSON 响应。我真正想做的是将响应转换为 Pandas 数据框,但我不知道我可以使用什么函数来做到这一点。
import requests
import requests_cache
from requests_cache import CachedSession
import pandas as pd
session = CachedSession()
base_url = "https://api.crossref.org/works/"
for doi in ["10.4324/9780429202483", "10.1177/2053168017702990", "10.1016/j.chb.2019.05.017", "10810730.2017.1421730," "10.1002/wmh3.247", "10.1177/1940161220919082"]:
url = base_url + str(doi)
response = session.get(url, headers={"mailto":"myemail@email.com"})
data = response.json()['message']
dataframe = pd.json_normalize(data)
dataframe.head(6)
基本上,我正在尝试创建一个如下所示的数据框,但有六行,每个参数一个。 数据框
解决方案
如果我理解正确,您想创建行数等于参数数的数据框。
您可以max_level=1
使用pd.json_normalize()
函数创建只有一行的数据框,然后将六个数据框连接到一个pd.concat
:
import requests
import pandas as pd
base_url = "https://api.crossref.org/works/"
lst = [
"10.4324/9780429202483",
"10.1177/2053168017702990",
"10.1016/j.chb.2019.05.017",
"10810730.2017.1421730," "10.1002/wmh3.247",
"10.1177/1940161220919082",
]
dfs = []
with requests.session() as session:
for doi in lst:
url = base_url + str(doi)
response = session.get(url, headers={"mailto": "myemail@email.com"})
data = response.json()["message"]
dataframe = pd.json_normalize(data, max_level=1)
dfs.append(dataframe)
df = pd.concat(dfs, ignore_index=True)
print(df[["reference-count", "publisher", "isbn-type"]]) # <-- print only few columns for brevity
印刷:
reference-count publisher isbn-type
0 0 Routledge [{'value': '9780429202483', 'type': 'electronic'}]
1 31 SAGE Publications NaN
2 89 Elsevier BV NaN
3 27 Wiley NaN
4 54 SAGE Publications NaN
推荐阅读
- javascript - 从父元素传递道具
- java - 如何
使用 Selenium 和 Java 将字符串拆分为列表 - mongodb - 我应该在 mongodb 事务中创建用于重试的递归方法以避免文档级锁定错误吗?
- file - 为摘要使用单独的文件
- java - 如何在 Java 中为 Math.Context 设置比例?
- angular - 使用 controlValueAccessor 的自定义组件 - ts-Lint 错误:在定义之前使用了组件
- android - 使用 useSafeArea Hook 时反应原生 Android TextInput 问题
- android - 如何在flutter android中将文本添加到默认启动画面
- c++ - XCB:xcb_wait_for_event 未捕获应用程序生成的事件
- java - 插入一对多关系弹簧靴