使用 Yfinance 获取市值数据

Posted

技术标签:

【中文标题】使用 Yfinance 获取市值数据【英文标题】:getting Market cap data using Yfinance 【发布时间】:2021-03-05 23:22:05 【问题描述】:

我试图使用 yfinance 获取股票的市值数据。这是我的代码:

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)

通过使用此代码,我收到以下错误:

*** IndexError: 列表索引超出范围

我附上错误的屏幕截图以及 DataFrame 的屏幕截图

为了规避这个问题,我参考了下面指定的 url。

Yfinance IndexError: list index out of range

使用上述网址中给出的修复修改的代码是:

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')

通过使用上面的代码,我收到了屏幕截图中描述的错误:

通过使用代码,我收到以下错误:

KeyError: 'regularMarketPrice

同样的截图如下:

点击错误提到的文件,我们可以看到错误是由函数 def_read_lines 引起的。下面附上截图:

我确实尝试使用 yahooquery 库,但在 values 数据框中,所有值都填充为错误值,而不是实际市值值,如图所示:

我不明白我哪里出错了。任何帮助将不胜感激

【问题讨论】:

你在哪里使用yfinance库? 首先我导入它:import yfinance as yf 然后我在这行中使用它来计算市值:market_data = data.get_quote_yahoo(ticker)['marketCap'] BHARTIARTL.NS nan;ASHOKLEY.NS nan;AUROPHARMA.NS 15.902734;我们能够获得三个问题的 market_cap_data,但结果是 NaN,因为 pe_data 是两个问题的 NaN。这三只股票是 ['BHARTIARTL.NS'、'ASHOKLEY.NS' 和 'AUROPHARMA.NS']。 它适用于某些股票,但如果您选择多只股票,则会出错。我的意思是非常大的值。在这种情况下,我正在尝试计算在 BSE 中注册的所有股票的市值 如果有一些问题而不是全部问题,那么所有问题在哪里?它们是否以文本形式提供? 【参考方案1】:

可能是您的 Excel 文件中的某些代码未列出或存在某种命名问题。 所以我解决了尝试用data.get_qoute_yahoo('ticker')一一下载股票然后with pd.concat()我得到了我的数据框。

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)

【讨论】:

【参考方案2】:

这里是可能解决您的问题的示例代码

import yfinance as yf
import numpy as np
from pandas_datareader import data

Tickers=["AAPL","GOOG","RY","HPQ"]

for str in Tickers:
    tickers = [(str)]
    print(tickers)

    market_cap=int(data.get_quote_yahoo(str)['marketCap'])
    print(market_cap)

如果我误解了您的问题或您可能需要的任何改进,请告诉我

【讨论】:

嗨,您的代码在添加小列表时完全正常。但是,当我尝试从 excel 列表中下载大量股票代码的市值时,它在 market_cap=int(data.get_quote_yahoo(str)['marketCap']) 行上给我一个错误,说“'DataFrame'对象有没有属性“get_quote_yahoo” 我已经升级了 yfinance 库 它没有解决我的问题

以上是关于使用 Yfinance 获取市值数据的主要内容,如果未能解决你的问题,请参考以下文章

用 Python 通过雅虎财经获取股票数据

YFINANCE:检索更多ETF数据

无法获取数据,使用包 yfinance 按格式分组下载到熊猫数据框中,仅适用于我的子列表中的特定代码

如何从 yfinance 获取特定时间和日期的 1 分钟价格数据?

当我从 api (yfinance) 获取数据时,Numpy Array 缺少日期

yfinance 和 yahoo 财务数据非常不同