Python:将图像和数据帧写入同一个 excel 文件
Posted
技术标签:
【中文标题】Python:将图像和数据帧写入同一个 excel 文件【英文标题】:Python: Writing Images and dataframes to the same excel file 【发布时间】:2019-01-07 02:54:26 【问题描述】:我正在创建一个 excel 仪表板,我想生成一个 excel 工作簿,其中一半的工作表上有一些数据框,另一半有 .png 文件。我很难一次性将它们写入同一个文件。这是我目前拥有的。似乎当我运行我的 for 循环时,它不会让我添加额外的工作表。关于如何将图像文件添加到此工作簿的任何建议?我找不到任何关于为什么我不能添加更多工作表的信息 谢谢!
dfs = dict()
dfs['AvgVisitsData'] = avgvisits
dfs['F2FCountsData'] = f2fcounts
writer = pd.ExcelWriter("MyData.xlsx", engine='xlsxwriter')
for name, df in dfs.items():
df.to_excel(writer, sheet_name=name, index = False)
然后我想在同一个 Excel 工作簿中添加几张带有一些图像的工作表。像这样的东西,但我不是在创建一个全新的工作簿。
workbook = xlsxwriter.Workbook('MyData.xlsx')
worksheet = workbook.add_worksheet('image1')
worksheet.insert_image('A1', 'MemberCollateral.png')
有人有解决此问题的提示吗?
【问题讨论】:
什么不起作用?这看起来像您正在创建第二个工作簿。 @mauve 对。我想继续添加到我的初始 MyData.xlsx 文件中。我只是以第二个代码块为例。您将如何执行第一段代码然后在新工作表上添加 MemberCollateral.png 文件? 您应该可以通过writer.book
属性访问工作簿。
@mauve 你有什么链接可以让我看看可能有用的吗?
试试writer.sheets['your sheet name'].insert_image(...)
【参考方案1】:
以下是如何获取底层 XlsxWriter 工作簿和工作表对象的句柄并插入图像的示例:
import pandas as pd
# Create a Pandas dataframe from some data.
df = pd.DataFrame('Data': [10, 20, 30, 20, 15, 30, 45])
# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('pandas_image.xlsx', engine='xlsxwriter')
# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1')
# Get the xlsxwriter workbook and worksheet objects.
workbook = writer.book
worksheet = writer.sheets['Sheet1']
# Insert an image.
worksheet.insert_image('D3', 'logo.png')
# Close the Pandas Excel writer and output the Excel file.
writer.save()
输出:
有关更多示例,另请参阅 XlsxWriter 文档中的 Working with Python Pandas and XlsxWriter
【讨论】:
【参考方案2】:这是我想出的解决方案。如果不使用load_workbook
重新导入工作簿,我仍然无法找到一种方法,但这完成了工作。
# assign dataframes to dictionary and export them to excel
avgvisits = pd.DataFrame(pd.read_sql(avgvisits(), cnxn))
f2fcounts = pd.DataFrame(pd.read_sql(f2fcounts(), cnxn))
activityencounters = pd.DataFrame(pd.read_sql(ActivityEncounters(), cnxn))
activityencountersp = activityencounters.pivot_table(values='ActivityCount', index = ['Activity'], columns= ['QuarterYear'], aggfunc=np.max)
dfs = dict()
dfs['AvgVisitsData'] = avgvisits
dfs['F2FIndirect'] = f2fcounts
dfs['ActivityEncounters'] = activityencountersp
writer = pd.ExcelWriter("MyData.xlsx", engine='xlsxwriter')
for name, df in dfs.items():
if name != 'ActivityEncounters':
df.to_excel(writer, sheet_name=name, index=False)
else:
df.to_excel(writer, sheet_name=name, index=True)
writer.save()
writer.close()
# re-import the excel book and add the graph image files
wb = load_workbook('MyData.xlsx')
png_loc = 'MemberCollateral.png'
wb.create_sheet('MemberCollateralGraph')
ws = wb['MemberCollateralGraph']
my_png = openpyxl.drawing.image.Image(png_loc)
ws.add_image(my_png, 'A1')
png_loc = 'DirectIndirect.png'
ws = wb['F2FIndirect']
my_png = openpyxl.drawing.image.Image(png_loc)
ws.add_image(my_png, 'A10')
png_loc = 'QuarterlyActivitySummary.png'
ws = wb['ActivityEncounters']
my_png = openpyxl.drawing.image.Image(png_loc)
ws.add_image(my_png, 'A10')
wb.save('MyData.xlsx')
【讨论】:
您是否尝试过我发布的答案中的解决方案?以上是关于Python:将图像和数据帧写入同一个 excel 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何将 JSON **text** 写入 Excel 文件?