Сохраняем и загружем на диск данные по акциям SP500 в формате parquet

Основные моменты

Чтобы ускорить взаимодействия с данными из библиотеки yfinance создадим необходимый нам pandas DataFrame и сохраним его локально для дальнейшего использования.

Сохраним данные по всем акциям индекса SP500 за последний полный год до текущего момента. Ориентируемся по составу акций в индексе на страницу в wiki

Для работы с современным форматом parquet потребуется установить библиотеку fastparquet. Просто пишем:

pip install fastparquet

Файл данных: base_sp500.parquet.gzip

Полный текст примера: sp500_write_base.py

# -*- coding: utf-8 -*-
"""
@author: Semenov Andrey
"""
import pandas as pd
import yfinance as yf
import datetime
today = datetime.date.today()

# There are 2 tables on the Wikipedia page
# we want the first table
payload = pd.read_html('https://en.wikipedia.org/wiki/List_of_S%26P_500_companies')
df = payload[0]
print(df.head())
start_date = '2022-01-01' #'%Y-%m-%d'
end_date = today          #'%Y-%m-%d'
symbols = df['Symbol'].values.tolist()
ticker = yf.Ticker(symbols[0])
load_ticker = ticker.history(start = start_date, end = end_date, actions=True)
load_ticker["Ticker"] = symbols[0]
base = load_ticker

for symbol in symbols[1:]:
    ticker = yf.Ticker(symbol)
    load_ticker = ticker.history(start = start_date, end = end_date, actions=True)
    load_ticker["Ticker"] = symbol
    base = pd.concat([base, load_ticker])
print(base)
base.to_parquet('base_sp500.parquet.gzip', compression='gzip')

Читаем файл с диска. Для проверки целостности проведем подсчет всех строк с полем Dividends > 0.

Полный текст примера: read_base_sp500.py

# -*- coding: utf-8 -*-
"""
@author: Semenov Andrey
"""
import pandas as pd
import yfinance as yf

base = pd.read_parquet('base_sp500.parquet.gzip')
print(base.columns)
print(len(base.loc[base.Dividends > 0].Ticker))