将pandas数据框写入现有的工作簿

我想保存一个数据框到文件的第二张,但我不能这样做,我不知道为什么。

yfile = openpyxl.load_workbook(new_file, data_only=True) ws = yfile.worksheets[0] sheet2 = yfile.create_sheet() ws2 = yfile.get_sheet_by_name("Sheet").title = "Analysis" writer = pd.ExcelWriter(yfile, engine='xlsxwriter') df3.to_excel(writer, sheet_name='Analysis') writer.save() yfile.save(new_file) 

我已经创build了表“分析”,但是当我保存在其中时,我收到以下回应:“AttributeError:'工作簿'对象没有属性'写'”

我有什么修改?

你可以这样做:

 In [352]: fn = r'/path/to/your/excel.xlsx' 

创buildpandasexcel作家对象

 In [353]: writer = pd.ExcelWriter(fn, engine='openpyxl') 

将openpyxl的书分配给pandas writer.book

 In [355]: writer.book = load_workbook(fn) 

从openpyxl工作表创buildpandasExcelWriter工作表

 In [356]: writer.sheets = dict((ws.title, ws) for ws in book.worksheets) 

将pandasDF保存到新的表格中,保留旧的表格

 In [357]: df.to_excel(writer, sheet_name='New') 

closures作家对象

 In [358]: writer.save() 

或者你可以使用下面的辅助函数:

 def append_df_to_excel(filename, df, sheet_name='Sheet1', startrow=None, **to_excel_kwargs): """ Append a DataFrame [df] to existing Excel file [filename] into [sheet_name] Sheet. If [filename] doesn't exist, then this function will create it. Parameters: filename : File path or existing ExcelWriter (Example: '/path/to/file.xlsx') df : dataframe to save to workbook sheet_name : Name of sheet which will contain DataFrame. (default: 'Sheet1') startrow : upper left cell row to dump data frame. Per default (startrow=None) calculate the last row in the existing DF and write to the next row... to_excel_kwargs : arguments which will be passed to `DataFrame.to_excel` [can be dictionary] Returns: None """ from openpyxl import load_workbook # ignore [engine] parameter if it was passed if 'engine' in to_excel_kwargs: to_excel_kwargs.pop('engine') # create a writer for this month and year writer = pd.ExcelWriter(filename, engine='openpyxl') try: # try to open an existing workbook writer.book = load_workbook(filename) # get the last row in the existing Excel sheet # if it was not specified explicitly if not startrow and sheet_name in writer.book.get_sheet_names(): startrow = writer.book.get_sheet_by_name(sheet_name).max_row # copy existing sheets writer.sheets = dict( (ws.title, ws) for ws in writer.book.worksheets) except FileNotFoundError: # file does not exist yet, we will create it pass if not startrow: startrow = 0 # write out the new sheet df.to_excel(writer, sheet_name, startrow=startrow, **to_excel_kwargs) # save the workbook writer.save()