#python #pandas #dataframe #yfinance
Вопрос:
Мои цели заключаются в том, чтобы:
- Получите данные Yahoo finance OHLC (Открытые, высокие, низкие и закрытые) в Postgres.
- Возможность легко обновлять данные.
- Возможность легко добавлять или удалять тикеры.
Моя нынешняя методология:
- Создайте фрейм данных панд.
- Сбросьте данные в файл .csv
- Из КОПИИ Postgres
ПРОБЛЕМА: Я не знаю, как создать фрейм данных для компании A, затем добавить (объединить, объединить, объединить и т. Д.) фрейм данных для других компаний (до сих пор~150 компаний) и сбросить в .cvs.
Ниже приведен мой фактический код и обходной путь, который обеспечивает желаемый результат, но является неуклюжим.
Дай мне знать, что ты думаешь.
ФАКТИЧЕСКИЙ (работает не так, как ожидалось)
import pandas as pd import yfinance as yf tickers = ['VIR','PATH'] #ticker = ['VIR'] for ticker in tickers: df_yahoo = yf.download(ticker, #start='2000-01-01', #end='2010-12-31', progress='True') df = pd.DataFrame(df_yahoo) df.insert(0, 'TICKER', ticker) file_name = "/Users/kevin/Dropbox/Programming/Python/test_data/deleteme.csv" df.to_csv(file_name) print(df)
ОБХОДНОЙ ПУТЬ (рабочий)
import pandas as pd import yfinance as yf import pickle tickers = ['VIR'] #ticker = ['VIR'] for ticker in tickers: df_yahoo = yf.download(ticker, #start='2000-01-01', #end='2010-12-31', progress='True') df = pd.DataFrame(df_yahoo) df.insert(0, 'TICKER', ticker) tickers = ['PATH'] #ticker = ['VIR'] for ticker in tickers: df_yahoo = yf.download(ticker, #start='2000-01-01', #end='2010-12-31', progress='True') df1 = pd.DataFrame(df_yahoo) df1.insert(0, 'TICKER', ticker) frames = [df1, df] result = pd.concat(frames) file_name = "/Users/kevin/Dropbox/Programming/Python/test_data/deleteme.csv" result.to_csv(file_name) print(df)
Ответ №1:
Учитывая то, чего, я думаю, вы хотите достичь, вот как бы я это сделал:
# Create a function to load the data and create the frame # Assumes len(tickers) gt;= 1 def build_df(tickers): df = pd.DataFrame(yf.download(tickers[0], #start='2000-01-01', #end='2010-12-31', progress='True')) df.insert(0, 'TICKER', tickers[0]) for ticker in tickers[1:]: dx = pd.DataFrame(yf.download(ticker, #start='2000-01-01', #end='2010-12-31', progress='True')) dx.insert(0, 'TICKER', ticker) df = pd.concat([df, dx]) return df
Затем вызовите функцию для сборки нужного DF следующим образом:
result = build_df(tickers)
Наконец, выведите завершенный кадр в CSV
file_name = "/Users/kevin/Dropbox/Programming/Python/test_data/deleteme.csv" result.to_csv(file_name)