Обновленный пост. Я пытаюсь получить данные из баланса в Yahoo Fianance, используя пакет yahoo_fin. Для загрузки данных я использую код ниже:
import yahoo_fin.stock_info as si
import pandas as pd
import requests
import requests_html
ticker_list = ["amzn", "aapl"]
# Get data in the current column for each stock's valuation table
balance_sheets = {}
for ticker in ticker_list:
balance_sheets[ticker] = si.get_balance_sheet(ticker)
recent_sheets = {ticker : sheet.iloc[:,:1] for ticker,sheet in balance_sheets.items()}
for ticker in recent_sheets.keys():
recent_sheets[ticker] = pd.DataFrame(columns=["9/29/2022", "9/29/2021", "9/29/2020"])
# combine all balance sheets together
combined_sheets = pd.concat(recent_sheets)
# reset index to pull in ticker
combined_sheets = combined_sheets.reset_index()
# update column names
combined_sheets.columns = ["Ticker", "Breakdown", "9/29/2022", "9/29/2021", "9/29/2020"]
Но когда я пытаюсь получить данные, у меня на выходе появляется пустой фрейм данных.
И я попытался получить данные с помощью yfinance:
import yfinance as yf
import pandas as pd
fang = ['FB','AMZN','NFLX','GOOG']
tickers = [yf.Ticker(ticker) for ticker in fang]
dfs = [] # list for each ticker's dataframe
for ticker in tickers:
# get each financial statement
pnl = ticker.financials
bs = ticker.balancesheet
cf = ticker.cashflow
# concatenate into one dataframe
fs = pd.concat([pnl, bs, cf])
# make dataframe format nicer
# Swap dates and columns
data = fs.T
# reset index (date) into a column
data = data.reset_index()
# Rename old index from '' to Date
data.columns = ['Date', *data.columns[1:]]
# Add ticker to dataframe
data['Ticker'] = ticker.ticker
dfs.append(data)
data.iloc[:,:3]# for display purposes
Но у меня ошибка:
KeyError Traceback (most recent call last)
Input In [5], in <cell line: 8>()
7 dfs = [] # list for each ticker's dataframe
8 for ticker in tickers:
9 # get each financial statement
---> 10 pnl = ticker.financials
11 bs = ticker.balancesheet
12 cf = ticker.cashflow
KeyError: 'regularMarketOpen'
Я также пытался решить эту проблему, как в посте Yfinance KeyError: 'regularMarketOpen', но не нашел "сырого" data = utils.get_json(url+'/financials', proxy)" in yfinance/base.py"
Фрейм данных recent_sheets[ticker]
— это пустой фрейм данных, поэтому ось имеет 0 элементов. Если вы пытаетесь создать новый фрейм данных с этими столбцами, сделайте
for ticker in recent_sheets.keys():
recent_sheets[ticker] = pd.DataFrame(columns=["9/29/2022", "9/29/2021", "9/29/2020"])
это работает, большое спасибо! Но теперь у меня на выходе пустой фрейм данных, хотя даты такие же, как в балансе Yahoo Finance.