首页 > 解决方案 > 将数据框导出到新的 Excel 工作表,并将特定值写入特定工作表

问题描述

我遇到了一个我认为与需要相关的问题:

  1. 将数据框导出到新的 Excel 工作表(在导出时创建)
  2. 将特定值写入同一工作簿中的现有工作表
  3. 在循环中执行上述两项

我可以让 1 和 3 自己工作,我可以让 2 和 3 自己工作,但是当我尝试做所有这三件事时,它就不起作用了。我认为使用 xlsxwriter 引擎的 pandas to_excel 存在一些问题,与 sheet.write(row,column, value) 冲突到同一工作簿。

例如,这本身就可以工作(请注意,我有“作家”的东西来将数据框导出到新工作表注释掉):

import pandas as pd
import xlsxwriter

loopList = ["A","B","C","D","E"]
data = [['tom', 10], ['nick', 15], ['juli', 14]] 
counter = 1
  
# Create the pandas DataFrame 
df = pd.DataFrame(data, columns = ['Name', 'Age'])
 
workbook = xlsxwriter.Workbook('C:\\Test\\Test.xlsx')
totalsSheet = workbook.add_worksheet('Totals')
writer = pd.ExcelWriter('C:\\Test\\Test.xlsx', engine = 'xlsxwriter')

for sheets in loopList:
    
    #df.to_excel(writer, sheet_name = sheets, index=False)
    totalsSheet.write(counter, counter, sheets + str(counter)) 
    counter+=1
    
#writer.save()
#writer.close()
workbook.close()

以上使 test.xlsx 工作簿具有总计工作表,在递增行/列中具有“A1”、“B2”等。

同样,当我注释掉工作簿的内容并且联合国将 pandas-export 数据框注释到新工作表时,这也有效:

import pandas as pd
import xlsxwriter

loopList = ["A","B","C","D","E"]
data = [['tom', 10], ['nick', 15], ['juli', 14]] 
counter = 1
  
# Create the pandas DataFrame 
df = pd.DataFrame(data, columns = ['Name', 'Age'])
 
workbook = xlsxwriter.Workbook('C:\\Test\\Test.xlsx')
totalsSheet = workbook.add_worksheet('Totals')
writer = pd.ExcelWriter('C:\\Test\\Test.xlsx', engine = 'xlsxwriter')

for sheets in loopList:
    
    df.to_excel(writer, sheet_name = sheets, index=False)
    #totalsSheet.write(counter, counter, sheets + str(counter)) 
    counter+=1
    
writer.save()
writer.close()
#workbook.close()

以上为我提供了一个新的测试工作簿,其中包含 5 个工作表(A、B、C 等),每个工作表都导出了相同的数据框。

但是,我似乎不能两者都做;根据我写入 Excel 的行的顺序,它仍然只执行一个或另一个(我没有收到错误,我只是得到一个不是我想要做的两件事的结果)。

有没有办法在同一个循环中完成这两件事?

我正在使用 python 3.xx 感谢您的帮助。

标签: pythonexcelpandasdataframe

解决方案


你能不能只运行它来分隔每个打开和关闭文件的循环,以确保它对每个进程都可用?就像是...

import pandas as pd
import xlsxwriter

loopList = ["A","B","C","D","E"]
data = [['tom', 10], ['nick', 15], ['juli', 14]] 
counter = 1
  
# Create the pandas DataFrame 
df = pd.DataFrame(data, columns = ['Name', 'Age'])

with pd.ExcelWriter('C:\\Test\\Test.xlsx', engine = 'xlsxwriter') as writer: 
    for sheets in loopList: 
        df.to_excel(writer, sheet_name = sheets, index=False)

workbook = xlsxwriter.Workbook('C:\\Test\\Test.xlsx')
totalsSheet = workbook.add_worksheet('Totals')

for sheets in loopList: 
    totalsSheet.write(counter, counter, sheets + str(counter)) 
    counter+=1
    
workbook.close()

更新

正如文档所说的 xlsxwriter ,深入研究它:

无法读取或修改现有 Excel XLSX 文件。

所以你之前尝试的是导致覆盖发生。但是,如果您更多地查看文档,您会发现关键是从 pd.ExcelWriter 对象创建工作簿对象。这意味着两个库可以同时写入文件。

我安装了 xlsxwriter,下面的代码对我有用:

import pandas as pd
import xlsxwriter

# data to write
loopList = ["A","B","C","D","E"]
data = [['tom', 10], ['nick', 15], ['juli', 14]] 

# Create the pandas DataFrame 
df = pd.DataFrame(data, columns = ['Name', 'Age'])

# create the writer object
writer = pd.ExcelWriter('Test.xlsx', engine='xlsxwriter')

# create the workbook object from the current writer object
# this means that pandas and xlsxwriter can both write to it
workbook = writer.book 
totalsSheet = workbook.add_worksheet('Totals')

# set the counter
counter = 1

# lopo through and use xlsx writer to write specific cells
for sheets in loopList: 
    totalsSheet.write(counter, counter, sheets + str(counter)) 
    counter+=1
    
# loop through generating new sheets and writing dfs to the file
for sheets in loopList: 
    df.to_excel(writer, sheet_name = sheets, index=False)

# save the written data
writer.save()

推荐阅读