是否可以从 yfinance 为许多公司创建主数据框?

Is it possible to create a master dataframe for many companies from yfinance?

我的目标是:

  1. 将雅虎财经 OHLC(开盘价、最高价、最低价和收盘价)数据导入 Postgres。
  2. 能够轻松更新数据。
  3. 能够轻松添加或删除代码。

我目前的方法:

  1. 创建 pandas 数据框。
  2. 将数据转储到 .csv
  3. 从 Postgres 复制

问题: 我不知道如何为公司 A 创建数据框,然后为其他公司(到目前为止约 150 家公司)附加(合并、加入、连接、ECT)数据框并转储到 .cvs。

下面是我的实际代码和解决方法,可提供所需的结果但很笨拙。

让我知道你的想法。

ACTUAL(未按预期工作)

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) 

鉴于我认为你想要完成的事情,我会这样做:

# Create a function to load the data and create the frame
# Assumes len(tickers) >= 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  

然后调用assemble所需DF的函数如下:

result = build_df(tickers)  

最后将完成的帧输出为CSV

file_name = "/Users/kevin/Dropbox/Programming/Python/test_data/deleteme.csv"
result.to_csv(file_name)