#python #pandas #dataframe #python-requests
Вопрос:
Я выполнял некоторые запросы 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)
В принципе, я пытаюсь создать фрейм данных, подобный приведенному ниже, но с шестью строками, по одной для каждого из параметров.
Таблицы данных
Ответ №1:
Если я вас правильно понял, вы хотите создать фрейм данных с количеством строк, равным количеству параметров.
Вы можете использовать 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
Комментарии:
1. Большое спасибо, Андрей! Этот код-то, что мне было нужно.