-
Notifications
You must be signed in to change notification settings - Fork 0
/
BEAdata.py
33 lines (25 loc) · 1.12 KB
/
BEAdata.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import pandas as pd
import requests
import json
def BEAdata(name, frequency, year, api_key='Add Your Key Here'):
url = f'https://apps.bea.gov/api/data/?UserID={api_key}' \
f'&method=GetData' \
f'&DataSetName=NIPA' \
f'&TableName={name}' \
f'&Frequency={frequency}' \
f'&Year={year}' \
f'&ResultFormat=JSON'
response = requests.get(url)
json_data = json.loads(response.text)
# Convert data to dataframe
df = pd.json_normalize(json_data['BEAAPI']['Results']['Data'])
df_filtered = df[['LineNumber', 'LineDescription', 'TimePeriod', 'DataValue']].copy()
# Convert the value to numbers
df_filtered['DataValue'] = pd.to_numeric(df_filtered['DataValue'], errors='coerce')
# Convert TimePeriod column into Date column
if frequency == 'M':
df_filtered['Date'] = pd.to_datetime(df_filtered['TimePeriod'].str[0:4]
+ '-' + df_filtered['TimePeriod'].str[5:], format='%Y-%m')
else:
df_filtered['Date'] = df_filtered['TimePeriod']
return df_filtered