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 文件中。我只是以第二个代码块为例。您将如何执行第一段代码然后在新工作表上添加 MemberCollat​​eral.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 文件?

将图像插入帧缓冲区并将帧缓冲区写入 png

cv2.imwrite() 没有将时间戳写入帧

使用python写入HDFS中的excel文件

使用 python 和“|”将 spark 数据帧写入文件分隔符

如何使用 OpenCV 和 Python 在视频流中逐帧处理视频图像