我想使用for循环(date_range)从网上获取一列,并将该列附加到同一张纸上,每次迭代都彼此相邻。
import pandas as pd
import datetime as dt
import openpyxl
range = pd.date_range(start='5/12/2020', end='5/21/2020')
for date in range:
df = pd.read_csv("ürl")
writer = pd.ExcelWriter('Sample.xlsx', engine='openpyxl')
writer.book = openpyxl.load_workbook('Sample.xlsx')
writer.sheets = dict((ws.title, ws) for ws in writer.book.worksheets)
read = pd.read_excel(r'Sample.xlsx')
writer.sheets.write(1, max_column+1, df)
writer.save()
date += delta
我不确定您仍然有什么,但是我试图以此为起点。它使用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
保存该新数据框。每次在新的一天运行它时,它都会在列的后面加上带有新数据的当前日期的标题。
如果您的数据只是公司列表,并且您只想运行一次此脚本并在一定范围内获取数据,则可能会发生类似的情况。
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