Я пытаюсь получить общие оценки esg за 2016–2021 годы для всех компаний в S&P500, но не у каждого тикера есть оценки esg, а у некоторых из них нет данных за 2016–2021 годы.
Мой текущий код выглядит так:
import yesg
df = pd.DataFrame()
sp500 = pd.read_html('https://en.wikipedia.org/wiki/List_of_S%26P_500_companies')[0]
tickers = sp500['Symbol'].tolist()
for t in tickers:
data=yesg.get_historic_esg(t)['Total-Score']
df.append(data)
Подскажите, пожалуйста, как получить нужные мне данные. Заранее спасибо за вашу помощь.
Вы можете попробовать что-то вроде этого:
sp500 = pd.read_html("https://en.wikipedia.org/wiki/List_of_S%26P_500_companies")[0]
tickers = sp500["Symbol"].tolist()
scores_ok = []
scores_ko = []
for t in tickers:
if (ser := yesg.get_historic_esg(t)) is not None:
scores_ok.append(ser.loc[:, "Total-Score"].rename(t))
else:
scores_ko.append(t)
df = pd.concat(scores_ok, axis=1)
Выход :
#503 tickers | (448 OK, 55 KO)
print(df)
MMM AOS ABT ... ZBH ZION ZTS
Date ...
2014-09-01 73.0 NaN 64.0 ... 61.0 47.0 47.0
2014-10-01 72.0 NaN 64.0 ... 61.0 47.0 47.0
2014-11-01 73.0 NaN 64.0 ... 61.0 47.0 47.0
... ... ... ... ... ... ... ...
2022-11-01 NaN NaN NaN ... NaN NaN NaN
2022-12-01 NaN NaN NaN ... NaN NaN NaN
2023-01-01 NaN 25.43 NaN ... 27.3 NaN NaN
[101 rows x 448 columns]
Нет, код на самом деле работает (иначе я бы не добавил его в качестве ответа;)). То, что вы видите, — это не ошибка, а просто сообщение print, созданное функцией get_historic_esg
, когда данные недоступны для данного тикера. Вам нужно подождать, пока код перестанет работать (и игнорировать сообщения..), и после этого вы получите точный фрейм данных, который я показываю в своем ответе/выводе. Удачи ;)
Большое спасибо за ваш ответ, но я получаю следующую ошибку: Произошла ошибка. Символ тикера может быть неправильным или вам может потребоваться подождать, чтобы продолжить.