Python 将dataframe导出到新的excel工作表,并将特定值写入特定工作表
我遇到了一个问题,我认为需要:Python 将dataframe导出到新的excel工作表,并将特定值写入特定工作表,python,excel,pandas,dataframe,Python,Excel,Pandas,Dataframe,我遇到了一个问题,我认为需要: 将数据框导出到新的Excel工作表(导出时创建) 将特定值写入同一工作簿中的现有工作表 在循环中执行上述两项 我可以让1号和3号自己工作,我也可以让2号和3号自己工作,但当我尝试做这三件事时,都不起作用。我认为pandas to_excel使用xlsxwriter引擎与工作表冲突存在一些问题。将(行、列、值)写入同一工作簿 例如,它本身就可以工作(注意,我有“writer”的东西要将dataframe导出到新的工作表中,并注释掉): 上面是test.xlsx工作簿
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的顺序,它仍然只执行一项或另一项操作(我没有得到错误,我只是得到一个结果,这不是我想要做的两件事)
有没有办法在同一个循环中完成这两件事
我正在使用Python3.x.x。谢谢您的帮助。您能不能将它运行到单独的循环中,每个循环打开和关闭文件,以确保每个进程都可以使用它?类似于
将熊猫作为pd导入
导入xlsxwriter
循环列表=[“A”、“B”、“C”、“D”、“E”]
数据=[['tom',10],'nick',15],'juli',14]]
计数器=1
#创建数据帧
df=pd.DataFrame(数据,列=['Name','Age'])
使用pd.ExcelWriter('C:\\Test\\Test.xlsx',引擎='xlsxwriter')作为编写器:
对于循环列表中的图纸:
df.to_excel(编写器,工作表名称=工作表,索引=False)
工作簿=xlsxwriter.workbook('C:\\Test\\Test.xlsx')
totalsSheet=工作簿。添加工作表(“总计”)
对于循环列表中的图纸:
总计纸张。写入(计数器,计数器,纸张+str(计数器))
计数器+=1
工作簿.关闭()
更新
更深入地研究它,正如文档中所说,xlsxwriter:
无法读取或修改现有Excel XLSX文件
因此,您之前尝试的是导致覆盖发生的原因。但是,如果查看,您将看到关键是从pd.ExcelWriter对象创建工作簿对象。这意味着两个库可以同时写入文件
我安装了xlsxwriter,下面的代码适合我:
将熊猫作为pd导入
导入xlsxwriter
#要写入的数据
循环列表=[“A”、“B”、“C”、“D”、“E”]
数据=[['tom',10],'nick',15],'juli',14]]
#创建数据帧
df=pd.DataFrame(数据,列=['Name','Age'])
#创建writer对象
writer=pd.ExcelWriter('Test.xlsx',engine='xlsxwriter')
#从当前writer对象创建工作簿对象
#这意味着pandas和xlsxwriter都可以给它写信
工作簿=writer.book
totalsSheet=工作簿。添加工作表(“总计”)
#设置计数器
计数器=1
#lopo-through并使用xlsx-writer写入特定的单元格
对于循环列表中的图纸:
总计纸张。写入(计数器,计数器,纸张+str(计数器))
计数器+=1
#循环生成新工作表并将dfs写入文件
对于循环列表中的图纸:
df.to_excel(编写器,工作表名称=工作表,索引=False)
#保存写入的数据
writer.save()
这也有同样的问题;无论我最后放哪一个循环,结果文件都是这样的。我必须包含一个“writer.save()”和“writer.close()”才能使循环正常工作,但总体结果是一样的;如果ExcelWriter是最后一个循环,那么我会得到包含5个数据框的excel工作簿。如果totalsSheet是最后一张,我会得到带有“Totals”选项卡的工作簿,没有其他工作表。我以前没有使用过xlsxwriter,但看到了我对编辑所做的微小更改。我想这可能会有所不同。我感谢你的努力,但这也不起作用,我只拿到了总数的账单,其他什么都没有。如果要求xlsxwriter做两件事,就好像xlsxwriter在干扰自己一样,比如它覆盖了先做的事情。我有点惊讶,没有其他人会遇到这个问题,或者没有人需要将数据帧导出到多个工作表,并将值写入一个特定的工作表—所有这些都在一个循环中—不用担心。我已经进一步研究并解决了这个问题。请看我的最新答案。这很有效,我感谢你的帮助。不幸的是,这必须在单独的循环中完成,因为我基本上会将循环中的所有代码重复两次,因为写入Totals页面的许多内容都来自同一类型的数据争用,这些数据争用发生在另一个循环中的同一源数据和数据帧上。这看起来不太像蟒蛇。但我很高兴至少能做到这一点,谢谢你的帮助。如果其他人知道如何在同一个循环中实现这一点,我很乐意看到它。谢谢大家
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()