python - 将数据框导出到新的 Excel 工作表,并将特定值写入特定工作表
问题描述
我遇到了一个我认为与需要相关的问题:
- 将数据框导出到新的 Excel 工作表(在导出时创建)
- 将特定值写入同一工作簿中的现有工作表
- 在循环中执行上述两项
我可以让 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 感谢您的帮助。
解决方案
你能不能只运行它来分隔每个打开和关闭文件的循环,以确保它对每个进程都可用?就像是...
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()
推荐阅读
- flutter - Flutter Visibility with Condition(如何只隐藏一个有条件的小部件)
- javascript - 如何在单击 javascript 时使用导航栏链接切换活动类
- javascript - 随着宽度变小,如何增加一个元素与另一个元素的距离?
- python - 检查 ping 命令
- python - pip 版本冲突(LooseVersion 是对的)
- javascript - 有没有办法直接从网站获取 Google Analytic 渠道?
- mysql - MySQL 或 MariaDB 的 REGEXP_REPLACE 不会使用通配符匹配替换空字符串
- google-chrome - Chrome 开发工具不会突出显示活动的 CSS 类
- java - JFrog Artifactory 中的 JAR 下载到 Gradle 缓存,但未显示在项目和外部依赖项中
- jmeter - 带有 Maven 的 Jmeter - 附加数据未保存在 csv 结果文件中