解决方案 1
我不完全确定你还有什么,但我试图以此作为起点。它使用 Yahoo Finance API 来模拟您的股票价格。这定义了两个函数,一个接受一个公司符号并获取该公司的当前市场价格,另一个通过将其应用于一列符号的所有值来将其推广到数据框。
from datetime import datetime
def get_market_price(symb):
try:
comp_info = yf.Ticker(symb)
return comp_info.info['regularMarketPrice']
except Exception:
return np.nan
def fetch_today(df):
today = datetime.today().date().strftime('%Y-%m-%d')
df[today] = df['Companies'].apply(get_market_price)
return df
这是一些示例数据,以及上述函数的应用。
df = pd.DataFrame({
'Companies': ['XOM', 'GE', 'MSFT', 'BP', 'C', 'PG']
})
df = fetch_today(df)
print(df)
输出
Companies 2020-05-25
0 XOM NaN
1 GE 6.48
2 MSFT 183.19
3 BP 22.98
4 C NaN
5 PG 112.29
在此示例中,您应该每天使用pd.read_csv 读取数据,应用fetch_today,然后使用pd.to_csv 保存新的数据框。每次您在新的一天运行它时,它都会在一个列中附加一个带有当前日期标题的新数据。
解决方案 2
如果您的数据只是公司列表,并且您只想运行此脚本一次并获取特定范围内的数据,那么这样的方法可能会起作用。
def get_closing_values(symb):
comp_info = yf.download(symb, start='2020-5-12', end='2020-5-21')
s = comp_info['Close']
s.name = symb
return s.to_frame().T
companies = ['XOM', 'GE', 'MSFT', 'BP', 'C', 'PG']
df = pd.concat([get_closing_values(comp) for comp in companies])
print(df)
Date 2020-05-11 2020-05-12 2020-05-13 2020-05-14 2020-05-15 2020-05-18
XOM 45.740002 44.119999 41.930000 42.299999 42.000000 45.340000
GE 6.190000 6.000000 5.790000 5.700000 5.490000 6.270000
MSFT 186.740005 182.509995 179.750000 180.529999 183.160004 184.910004
BP 23.500000 23.059999 22.230000 22.139999 21.820000 23.510000
C 44.070000 42.349998 40.599998 42.060001 41.919998 45.669998
PG 115.309998 114.550003 113.919998 113.809998 114.610001 116.209999