首页 > 解决方案 > 我使用什么函数来遍历 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)

基本上,我正在尝试创建一个如下所示的数据框,但有六行,每个参数一个。 数据框

标签: pythonpandasdataframepython-requests

解决方案


如果我理解正确,您想创建行数等于参数数的数据框。

您可以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

推荐阅读