是否可以从 yfinance 为许多公司创建主数据框?
Is it possible to create a master dataframe for many companies from yfinance?
我的目标是:
- 将雅虎财经 OHLC(开盘价、最高价、最低价和收盘价)数据导入 Postgres。
- 能够轻松更新数据。
- 能够轻松添加或删除代码。
我目前的方法:
- 创建 pandas 数据框。
- 将数据转储到 .csv
- 从 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)
我的目标是:
- 将雅虎财经 OHLC(开盘价、最高价、最低价和收盘价)数据导入 Postgres。
- 能够轻松更新数据。
- 能够轻松添加或删除代码。
我目前的方法:
- 创建 pandas 数据框。
- 将数据转储到 .csv
- 从 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)