2

我试图使用 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:列表索引超出范围

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

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:'常规市场价格

相同的屏幕截图如下所示:

错误

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

发生错误的函数

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

值数据框

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

4

2 回答 2

3

可能是您的 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)
于 2021-01-28T16:56:33.007 回答
0

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

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)

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

于 2020-11-24T05:58:31.047 回答