Я пытаюсь создать фрейм данных с некоторой информацией, которую я получил от yFinance.info. У меня есть список символов акций s&p 500, и я создал цикл for, используя символы акций для получения данных.
for sym in symbol:
x=yf.Ticker(sym)
sector.append(x.info['forwardPE'])
Однако каждый раз, когда я запускаю его, он работает очень долго и возвращает эту ошибку.
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-13-c87646d48ecd> in <module>
12 for sym in symbol:
13 x=yf.Ticker(sym)
---> 14 sector.append(x.info['forwardPE'])
15
~/opt/anaconda3/lib/python3.7/site-packages/yfinance/ticker.py in info(self)
136 @property
137 def info(self):
--> 138 return self.get_info()
139
140 @property
~/opt/anaconda3/lib/python3.7/site-packages/yfinance/base.py in get_info(self, proxy, as_dict, *args, **kwargs)
444
445 def get_info(self, proxy=None, as_dict=False, *args, **kwargs):
--> 446 self._get_fundamentals(proxy)
447 data = self._info
448 if as_dict:
~/opt/anaconda3/lib/python3.7/site-packages/yfinance/base.py in _get_fundamentals(self, kind, proxy)
283 # holders
284 url = "{}/{}/holders".format(self._scrape_url, self.ticker)
--> 285 holders = _pd.read_html(url)
286
287 if len(holders)>=3:
~/opt/anaconda3/lib/python3.7/site-packages/pandas/io/html.py in read_html(io, match, flavor, header, index_col, skiprows, attrs, parse_dates, thousands, encoding, decimal, converters, na_values, keep_default_na, displayed_only)
1098 na_values=na_values,
1099 keep_default_na=keep_default_na,
-> 1100 displayed_only=displayed_only,
1101 )
~/opt/anaconda3/lib/python3.7/site-packages/pandas/io/html.py in _parse(flavor, io, match, attrs, encoding, displayed_only, **kwargs)
913 break
914 else:
--> 915 raise retained
916
917 ret = []
~/opt/anaconda3/lib/python3.7/site-packages/pandas/io/html.py in _parse(flavor, io, match, attrs, encoding, displayed_only, **kwargs)
893
894 try:
--> 895 tables = p.parse_tables()
896 except ValueError as caught:
897 # if `io` is an io-like object, check if it's seekable
~/opt/anaconda3/lib/python3.7/site-packages/pandas/io/html.py in parse_tables(self)
211 list of parsed (header, body, footer) tuples from tables.
212 """
--> 213 tables = self._parse_tables(self._build_doc(), self.match, self.attrs)
214 return (self._parse_thead_tbody_tfoot(table) for table in tables)
215
~/opt/anaconda3/lib/python3.7/site-packages/pandas/io/html.py in _parse_tables(self, doc, match, attrs)
543
544 if not tables:
--> 545 raise ValueError("No tables found")
546
547 result = []
ValueError: No tables found
Когда я делаю это без добавления (например, "x.info['forwardPE']), он работает нормально и возвращает значения одно за другим. Может ли кто-нибудь помочь мне с тем, как я могу решить эту проблему? Извините за ужасное обобщение и заранее спасибо.
Вы можете поместить строку в блок try
и except
ошибки, чтобы увидеть, какие символы не работают должным образом. Поскольку вам нужно пройти 500 тикеров, вы можете столкнуться с более чем одним исключением, поэтому я бы рекомендовал использовать широкое выражение except Exception
и использовать traceback
(необязательно), чтобы получить больше информации об ошибке.
import traceback
import yfinance as yf
symbol = ['TSLA', 'F', 'MNQ', 'MMM']
sector = []
for sym in symbol:
try:
x = yf.Ticker(sym)
sector.append(x.info['forwardPE'])
except Exception as error:
print()
print(f'{error} for symbol {sym}')
print(traceback.format_exc())
print(sector)
Пожалуйста! Я бы порекомендовал sector.append("null " + sym)
, иначе ваш список sector
будет говорить "null"
только там, где есть пропущенные значения, и вы бы не знали, какие это акции, не добавляя также sym
Привет, большое спасибо! Я добавил сектор.append("null") под заявлением, чтобы я мог видеть, какие акции не имеют стоимости.