Финансы Python: создайте DataFrame (столбцы = много тикеров; строки = дата), составленный из общей стоимости активов.

я хотел бы знать код python, чтобы получить что-то вроде этого:

введите здесь описание изображения

где в строках у нас есть даты, а в столбцах - различные тикеры (например, все компании sp500), а значения - их общие активы.

Код только для одной компании: введите здесь описание изображения

но я не могу сделать это для сотен компаний. Можете вы помочь мне? Я благодарю вас заранее!


person Gianmarco    schedule 06.03.2021    source источник
comment
Привет, Джанмарко, пожалуйста, добавьте код в свой вопрос, а не добавляйте его в виде изображения. Людям будет легче помочь вам с вашим вопросом :)   -  person tbjorch    schedule 06.03.2021


Ответы (1)


Я создал код для получения отчетов о доходах нескольких акций на Yahoo Finance. Многие акции можно включить в список или импортировать в виде CSV-файла. Затем код зацикливается для их извлечения и объединения. После этого транспонируйте и измените имена столбцов. Для следующего вопроса, пожалуйста, отправьте код в виде текста, а не изображения. Это имеет то преимущество, что вы получите более быстрый ответ.

import yfinance as yf
import numpy as np
import pandas as pd

symbol = ["AAPL", "TSLA", "AMZN", "NKE", "GOOG", "KO"]
tickers = yf.Tickers(" ".join(symbol))
all_assets = pd.DataFrame(columns=['symbol','Total Assets'])

for i,ticker in enumerate(tickers.tickers):
    try:
        assets= tickers.tickers[i].balance_sheet.T["Total Assets"].to_frame()
        assets['symbol'] = symbol[i]
        all_assets = pd.concat([all_assets, assets], axis=0)
    except:
        pass

all_assets.head(10)

symbol  Total Assets
2020-09-26  AAPL    3.238880e+11
2019-09-28  AAPL    3.385160e+11
2018-09-29  AAPL    3.657250e+11
2017-09-30  AAPL    3.753190e+11
2020-12-31  TSLA    5.214800e+10
2019-12-31  TSLA    3.430900e+10
2018-12-31  TSLA    2.974000e+10
2017-12-31  TSLA    2.865537e+10
2020-12-31  AMZN    3.211950e+11
2019-12-31  AMZN    2.252480e+11

all_assets.pivot(columns='symbol').head(5)
    Total Assets
symbol      AAPL    AMZN    GOOG    KO      NKE             TSLA
2017-05-31  NaN     NaN     NaN     NaN     2.325900e+10    NaN
2017-09-30  3.753190e+11    NaN     NaN     NaN     NaN     NaN
2017-12-31  NaN     1.313100e+11    1.972950e+11    8.789600e+10    NaN     2.865537e+10
2018-05-31  NaN     NaN     NaN     NaN     2.253600e+10    NaN
2018-09-29  3.657250e+11    NaN     NaN     NaN     NaN     NaN
person r-beginners    schedule 06.03.2021
comment
Если мой ответ помог вам, примите его как правильный ответ и поставьте ему 1+, спасибо! - person r-beginners; 06.03.2021
comment
спасибо за ответ, к сожалению не работает. В Total Asset есть ошибка: KeyError: 'Total Assets'. - person Gianmarco; 07.03.2021
comment
Не все акции имеют общие данные об активах, поэтому может потребоваться обработка ошибок. - person r-beginners; 07.03.2021
comment
Другая библиотека, yahoo_fin, может использоваться для добавления каждой акции во фрейм данных в циклическом процессе. - person r-beginners; 07.03.2021
comment
Вы смогли справиться с ошибкой? Код был изменен, чтобы включить обработку ошибок. Кроме того, в конце формат сбора данных преобразуется из фрейма данных в горизонтальный формат. Мы сделали его таким, чтобы он мог работать как с широкими, так и с длинными форматами. - person r-beginners; 08.03.2021
comment
Я новичок в python, но я скопировал ваш код, и после all_assets.head(10) он создает пустой фрейм данных с символом и общими активами в столбцах. Может я что-то делаю не так, не знаю. - person Gianmarco; 08.03.2021
comment
с библиотекой yahoo_fin нельзя? В любом случае, спасибо! - person Gianmarco; 08.03.2021
comment
Если вы запустите мой код, у вас будет датафрейм. all_assets — это фрейм данных. yahoo_fin — это то, чем я никогда не пользовался. Я рад, что смог помочь и вам. Пожалуйста, примите мой ответ. - person r-beginners; 08.03.2021