I was trying to get market cap data of stocks using yfinance. Here is my code:
import yfinance as yf import numpy as np from pandas_datareader import data import pandas as pd import pandas_datareader as web tickers=pd.read_excel('C:/Users/Administrator/Desktop/bse.xlsx') UndervaluedCompanies=[] market_cap_data = web.get_quote_yahoo(tickers)['marketCap'] # Get the P/E ratio directly pe_data = web.get_quote_yahoo(tickers)['trailingPE'] # print stock and p/e ratio for stock, pe in zip(tickers, pe_data): print(stock, pe)
By using this code I get the following error:
*** IndexError: list index out of range
I attach screenshots of the error and also of the DataFrame
I referred to the url as specified below as to circumvent this issue.
Yfinance IndexError: list index out of range
The modified code made using the fix given in the above url is:
import yfinance as yf import pandas as pd import pandas_datareader as web import pandas_datareader as pdr from pandas_datareader import data data =pd.read_excel('C:/Users/Administrator/Desktop/bse.xlsx') ticker = data['Ticker'] rows = [] for ticker in ticker: try: market_data = data.get_quote_yahoo(ticker)['marketCap'] except IndexError as e: print(f'{ticker}: {e}') # print the ticker and the error print('n')
By using the above code I am getting an error as described in the screenshot:
By using the code I am getting the following error:
KeyError: ‘regularMarketPrice
The screenshot of the same is as shown:
On clicking on the file which is mentioned in error we can see that the error is caused by the function def_read_lines. The screenshot is attached below:
I did try using the yahooquery library but in the values dataframe all the values are populated as error values and not the actual market cap values as shown:
I am not understanding where am I going wrong. Any help will be appreciated
Advertisement
Answer
It could be that some of the ticker in your excel file aren’t listed or there is some kind of naming issue.
So i solved using try to download the stocks one by one with data.get_qoute_yahoo('ticker')
and then with pd.concat()
I obtained my dataframe.
import yfinance as yf from pandas_datareader import data tickers=pd.read_excel('C:/Users/Administrator/Desktop/bse.xlsx') market_data=[] for ticker in tickers: print(ticker) try: market_data.append(web.get_quote_yahoo(ticker)['marketCap']) except: print('Error with: ', ticker) df=pd.concat(market_data, axis=0) display(df)