Можете ли вы перетащить вызов API прямо в фрейм данных Pandas? - PullRequest
1 голос
/ 06 мая 2020

Я создаю небольшую программу для построения диаграммы некоторых данных API. Я настроил его для извлечения данных, а затем создания локального json, из которого я затем создаю фрейм данных.

Есть ли способ пропустить локальный файл и вытащить данные прямо в фрейм данных?

Как видите, пример, с которым я работаю, - это Ирландия, но я хотел бы получить что-то, что может ссылаться на любую страну, и надеюсь избежать создания файла.

# Import the libraries
import requests
import json
from datetime import datetime

import matplotlib.pyplot as plt

import pandas as pd
import numpy as np
from pandas import Series, DataFrame

# Save the current API call as a JSON file
# countryStatusdDayOne

# 1. Make an API call and store the response.
url = 'https://api.covid19api.com/total/dayone/country/ireland'
data = requests.get(url)

# Store the API response in a variable.
available_data = data.json()

filename = 'data/covid_call__ireland_day_one_workable.json'
with open(filename, 'w') as f:
    json.dump(available_data, f, indent=4)

# read the json
ireland = pd.read_json('data/covid_call__ireland_day_one_workable.json')

# create a dataframe 
df_ire = pd.DataFrame(ireland)

Все это для меня в новинку, так что любые советы о том, как отформатировать или улучшить мой код, тоже очень приветствуются!

Ответы [ 2 ]

1 голос
/ 06 мая 2020

IIU C, вы можете использовать pd.json_normalize для чтения ваших данных из памяти и пропустить создание файла на диске.

если вы читаете несколько стран, вы можете хранить все значения внутри словаря.

import requests
import json
from datetime import datetime

import matplotlib.pyplot as plt

import pandas as pd
import numpy as np
from pandas import Series, DataFrame

# Save the current API call as a JSON file
# countryStatusdDayOne

country = 'ireland'

# 1. Make an API call and store the response.
url = f'https://api.covid19api.com/total/dayone/country/{country}'
data = requests.get(url)

# Store the API response in a variable.
available_data = data.json()

dfs = {}

dfs[f'{country}'] = pd.json_normalize(available_data)

print(dfs['ireland'])

    Country CountryCode Province City CityCode Lat Lon  Confirmed  Deaths  \
0   Ireland                                      0   0          1       0   
1   Ireland                                      0   0          1       0   
2   Ireland                                      0   0          1       0   
3   Ireland                                      0   0          2       0   
4   Ireland                                      0   0          6       0   
..      ...         ...      ...  ...      ...  ..  ..        ...     ...   
62  Ireland                                      0   0      20833    1265   
63  Ireland                                      0   0      21176    1286   
64  Ireland                                      0   0      21506    1303   
65  Ireland                                      0   0      21772    1319   
66  Ireland                                      0   0      21983    1339   

    Recovered  Active                  Date  
0           0       1  2020-02-29T00:00:00Z  
1           0       1  2020-03-01T00:00:00Z  
2           0       1  2020-03-02T00:00:00Z  
3           0       2  2020-03-03T00:00:00Z  
4           0       6  2020-03-04T00:00:00Z  
..        ...     ...                   ...  
62      13386    6182  2020-05-01T00:00:00Z  
63      13386    6504  2020-05-02T00:00:00Z  
64      13386    6817  2020-05-03T00:00:00Z  
65      13386    7067  2020-05-04T00:00:00Z  
66      13386    7258  2020-05-05T00:00:00Z  
0 голосов
/ 06 мая 2020

можно использовать json_normalize:

import requests
import pandas as pd
from pandas.io.json import json_normalize


url = 'https://api.covid19api.com/total/dayone/country/ireland'
data = requests.get(url)

# Store the API response in a variable.
available_data = data.json()
df = json_normalize(available_data)
print(df.head())
...