从Excel文档导入数据头,使用pandassearch网页,然后在同一个Excel文档中导出到特定的行/列

我想弄清楚如何从一个特定的excel表导入数据,根据这些数据search雅虎财经的信息,然后打印通过雅虎收到的数据(通过pandas web.datareader)到同一个Excel中的特定行/列文件。

这是我迄今为止,但它不完成我要做的事情。 这将根据代码内的inputsearch信息,而不是从Excel工作表input,并将连接的数据框导出到新创build的电子表格,而不是预先存在的特定行和列。

import datetime as dt from datetime import datetime import pandas as pd import pandas_datareader.data as web start = dt.datetime.strptime("8/11/2017", "%m/%d/%Y") end = dt.datetime.today() headerlist = ('stock1 Open', 'stock1 Close', 'stock2 Open', 'stock2 Close', 'stock3 Open', 'stock3 Close', 'stock4 Open', 'stock4 Close') df1 = web.DataReader('stock1', 'yahoo', start, end)[['Open','Close']] df2 = web.DataReader('stock2', 'yahoo', start, end)[['Open','Close']] df3 = web.DataReader('stock3', 'yahoo', start, end)[['Open','Close']] df4 = web.DataReader('stock4', 'yahoo', start, end)[['Open','Close']] resultingdf = pd.concat([df1, df2, df3, df4], axis=1) resultingdf.to_csv('Portfolio.csv', header = headerlist) 

任何帮助或方向将非常感激。

编辑:

上面提供的代码运行良好,它只是没有达到我所设定的目标,因为它不是自动化的。 代码本身需要大量的input。 以下是我想要完成的一个总体分解:

 import datetime as dt from datetime import datetime import pandas as pd import pandas_datareader.data as web #import any other modules I may need #establish timeframe start = dt.datetime.strptime("8/11/2017", "%m/%d/%Y") end = dt.datetime.today() #search a pre-existing excel sheet's columns for stock tickers similar to: Name AAA BBB CCC DDD #use panda's datareader to find the information for those tickers from yahoo, google, etc. #concat. the dataframe #export the dataframe to a specific row and column in the same excel sheet similar to (with identifying header): Open High Low Close, Open High Low Close 

希望能解释得更好一些。

这应该做到这一点:

 import datetime as dt from datetime import datetime import pandas as pd import pandas_datareader.data as web from openpyxl import load_workbook start = dt.datetime.strptime("8/11/2017", "%m/%d/%Y") end = dt.datetime.today() data_file = pd.ExcelFile('Stocks.xlsx',header=0).parse('Sheet1') #1st sheet #print(data_file) #datafile.columns is the excel's header row with stock 1, stock 2, etc. For example: FB, AAPL, etc. stocks = web.DataReader(data_file.columns, 'yahoo', start, end)[['Open','Close']] #This creates a panel #print(stocks) #Writes to same workbookbook with data, but different tabs, where each column (Open, Close) is in a differen tab #You can't "append" data to an existing sheet, only overwrite it in full including headers- so can't reuse next day book = load_workbook('Stocks.xlsx') writer= pd.ExcelWriter('Stocks.xlsx', engine='openpyxl') writer.book = book writer.sheets = dict((ws.title, ws) for ws in book.worksheets) stocks.to_excel(writer) writer.save() 

或者,您可以使用结果创build新的Excel,其中每列(打开,closures)位于不同的选项卡中:

 writer= pd.ExcelWriter('Stock Data.xlsx', engine="xlsxwriter") stocks.to_excel(writer) #,index=False) writer.save() 

你甚至可以每天创build一个新文件,每天运行它,通过在pd.ExcelWriter中指定name +'xslx'

 now = datetime.datetime.now() name = 'Opportunistic_leads_' + str(now)[:10] 

看看这里:以某种方式迭代调用pandas datareader来转换stocks输出。 这将适用于将面板导出为ex​​cel的情况。

请注意,我无法find将数据附加到现有Excel表格而不覆盖它的方法,但这与我所能做到的尽可能接近。

仅供参考,当您将Panel(由DataReader生成)导出为ex​​cel时,会根据https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Panel在新选项卡中创build每个“列” .to_excel.html :