2017-09-14 96 views
0

我正在尝试将多张表写入一个工作簿,并且我正在使用pyexcelerate来利用它的优化写入时间。Python pyexcelerate库将多个工作表写入相同的工作簿?

这里是我当前的代码写入到一个工作簿:

def df_to_excel(df, path, sheet_name='Sheet 1'): 
    data = [df.columns.tolist(), ] + df.values.tolist() 
    wb = Workbook() 
    wb.new_sheet(sheet_name, data=data) 
    wb.save(path) 

现在这个工作完全正常,如果我只需要一个片;然而,如果我在多张纸上书写,只有最后一张纸将被保留(所有以前生成的纸张将被替换)。

我要保留所有工作表(与DIFF名OFC),我看着他们的GitHub的页面,但我不能找到这样的能力信息: https://github.com/kz26/PyExcelerate

我也看了成一些其他计算器帖子但它们使用不同的包:

  1. Writing resutls into 2 different sheets in the same Excel file
  2. xlwt create dynamic number of worksheets based on input
  3. creating multiple excel worksheets using data in a pandas dataframe

任何帮助表示赞赏!

+1

你总是使用'WB =工作簿()',重读链接实例创建一个新的** **的空工作簿。 – stovfl

+0

但没有任何链接使用pyexcelerate库。这些方法可用于diff库吗? – alwaysaskingquestions

+1

创建你的工作簿**只有一次**,外面并将它传递给你的'def df_to_excel(wb,...' – stovfl

回答

0

如果你想保存在不同的表一个Excel中的不同变量文件速度更快,也希望标题和Excel文件中的pandas.dataframe的指数。你可以做一些事情如下,

import timeit 
    from pyexcelerate import Workbook 

    def to_Excel(data, fileName): 
     start_time = timeit.default_timer() 
     wb = Workbook() 
     for key in data.keys(): 
      ws = wb.new_sheet(key) 
      frame = data[key] 
      frame = frame.transpose() 
      frame.reset_index(level=0, inplace = True) 
      frame = frame.transpose() 
      frame.reset_index(level=0, inplace = True) 
      row_num = frame.shape[0]  
      col_num = 1 
      for col_name, col_series in frame.iteritems(): 
       ws.range((1,col_num), (row_num,col_num)).value = [[x] for x in col_series] 
       col_num += 1  
     wb.save(fileName) 
     end_time = timeit.default_timer() 
     delta = round(end_time-start_time,2) 
     print("Took "+str(delta)+" secs") 

“数据”是一本字典的变量。 'data'的'key'作为'表名',每个键值的数据类型应该在pandas数据框中。

相关问题