pythonyfinance

getting Market cap data using Yfinance


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

Error

Tickers 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:

Error

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:

Functions where error occours

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:

values dataframe

I am not understanding where am I going wrong. Any help will be appreciated


Solution

  • 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_quote_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(data.get_quote_yahoo(ticker)['marketCap'])
               except:
                   print('Error with: ', ticker)
    df=pd.concat(market_data, axis=0)
    display(df)