如何使熊猫数据帧为循环(股票市场API)



我正试图将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)

最新更新