Получить оценки ESG от yesg

Я пытаюсь получить общие оценки 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)

Подскажите, пожалуйста, как получить нужные мне данные. Заранее спасибо за вашу помощь.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать что-то вроде этого:

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]

Большое спасибо за ваш ответ, но я получаю следующую ошибку: Произошла ошибка. Символ тикера может быть неправильным или вам может потребоваться подождать, чтобы продолжить.

anonim 15.04.2023 10:58

Нет, код на самом деле работает (иначе я бы не добавил его в качестве ответа;)). То, что вы видите, — это не ошибка, а просто сообщение print, созданное функцией get_historic_esg, когда данные недоступны для данного тикера. Вам нужно подождать, пока код перестанет работать (и игнорировать сообщения..), и после этого вы получите точный фрейм данных, который я показываю в своем ответе/выводе. Удачи ;)

Timeless 15.04.2023 11:01

Другие вопросы по теме