我正试图将API中的股票数据指标获取到Pandas数据框架中(公司的债务/权益比率(。
我已经成功地为一家公司获取了数据,但我想一次与几家公司合作。
我为一家公司使用的代码是:
# Variables
ticker = "AAPL"
FMP_API = "<api_key_here>"
data = "balance-sheet-statement"
def get_jsonparsed_data(url):
response = urlopen(url)
data = response.read().decode("utf-8")
return json.loads(data)
# Download info from API
url = "https://financialmodelingprep.com/api/v3/"+data+"/"+ticker+"?limit=120&apikey="+FMP_API
results = get_jsonparsed_data(url)
df = json_normalize(results)
# Calculate Debt/Equity Ratio
df[ticker] = df.totalLiabilities / df.totalStockholdersEquity
df = df[["date", ticker]].round(2)
# Convert the column Date, now in string type to a datetime type
# Make the Date Column the Index
# Creating a new dataframe with the new index and add the Date column name
# Dropp the extra Date Column
datetime_series = pd.to_datetime(df['date'])
datetime_index = pd.DatetimeIndex(datetime_series.values)
df = df.set_index(datetime_index).rename_axis('date', axis=1)
df.drop('date',axis=1,inplace=True)
df.head()
我得到的结果是:
date AAPL
2020-09-26 3.96
2019-09-28 2.74
2018-09-29 2.41
2017-09-30 1.80
2016-09-24 1.51
date
AAPL float64
dtype: object
我想得到的是:
ticker = ["AAPL", "FB", "GOOG", "AMZN"]
date AAPL FB GOOG AMZN
2020-09-26 3.96 0.24 0.44 2.44
2019-09-28 2.74 0.32 0.37 2.63
2018-09-29 2.41 0.16 0.31 2.73
2017-09-30 1.80 0.14 0.29 3.74
2016-09-24 1.51 0.10 0.20 3.32
date
AAPL float64
FB float64
GOOG float64
AMZN float64
dtype: object
我尝试使用for循环,但我一直在同一个数据帧上写,只能获得列表中最后一个ticker的值。
使用pandasmerge
将两个具有相同索引的不同ticker的相同数据帧合并。
您还可以简化代码,将日期设置为索引:
df.date = pd.to_datetime(df['date'])
df = df.set_index(date)
找到anwser。
这个想法是创建一个空列表和一个for循环。
每个循环都从一个ticker获取数据,最后我们通过连接列表来生成一个数据帧。
这是代码:
FMP_API = "<api_code_here>"
data = "balance-sheet-statement"
tickers = ['AAPL', 'MSFT']
df_list = []
for ticker in tickers:
url = "https://financialmodelingprep.com/api/v3/" + data + "/" + ticker + "?limit=120&apikey=" + FMP_API
df = pd.read_json(url)
df.set_index('date', inplace=True)
df[ticker] = df.totalLiabilities / df.totalStockholdersEquity
df_list.append(df[ticker])
df_final = pd.concat(df_list, axis=1)
print(df_final)