Python 如何将多个图表添加到一个excel的不同工作表中?
我想将使用xlsxwriter创建的多个图表导出到一个excel中的多个工作表中。我有两个数据帧,如下所示:Python 如何将多个图表添加到一个excel的不同工作表中?,python,xlsxwriter,Python,Xlsxwriter,我想将使用xlsxwriter创建的多个图表导出到一个excel中的多个工作表中。我有两个数据帧,如下所示: df_a = pd.DataFrame({'User':['101','102','103','104','105','106'],'CountA':[7,8,9,10,11,12],'CountB':[1,2,3,4,5,6],'CountC':[13,14,15,16,17,18]}) df_b = pd.DataFrame({'User':['107','108','109','
df_a = pd.DataFrame({'User':['101','102','103','104','105','106'],'CountA':[7,8,9,10,11,12],'CountB':[1,2,3,4,5,6],'CountC':[13,14,15,16,17,18]})
df_b = pd.DataFrame({'User':['107','108','109','110','111','112'],'ValA':[10,20,30,40,50,60],'ValB':[70,80,90,100,110,120],'ValC':[130,140,150,160,170,180]})
我已成功创建了一个excel文件,即“test.xlsx”,其中包含df_a及其相应的堆叠条形图,代码如下:
#Create a Pandas Excel writer using XlsxWriter as the engine.
excel_file_a = 'test.xlsx'
sheet_name_a = 'testA'
writer = pd.ExcelWriter(excel_file_a, engine='xlsxwriter')
df_a.to_excel(writer, sheet_name=sheet_name_a,index=False)
#Access the XlsxWriter workbook and worksheet objects from the dataframe.
workbook = writer.book
worksheet_a = writer.sheets[sheet_name_a]
#Create a chart object.
chart_a = workbook.add_chart({'type': 'column', 'subtype': 'stacked'})
#Configure the series of the chart from the dataframe data.
for col_num in range(1, 4):
chart_a.add_series({
'name': ['testA', 0, col_num],
'categories': ['testA', 1, 0, 5, 0],
'values': ['testA', 1, col_num, 5, col_num],
'gap': 2,
})
#Insert the chart into the worksheet.
worksheet_a.insert_chart('G2', chart_a)
#Close the Pandas Excel writer and output the Excel file.
writer.save()
但是,我还希望df_b及其各自的堆叠条形图位于同一excel文件“test.xlsx”中,但位于不同的工作表中,比如sheetname=testB。这是使用循环的好地方。例如:
#您只需要其中一个
excel_文件='test.xlsx'
writer=pd.ExcelWriter(excel\u文件,engine='xlsxwriter')
工作簿=writer.book
数据帧=(df_a,df_b)
#循环浏览我们的数据帧列表
对于范围内的i(len(数据帧)):
工作表名称='test'+'abcdefghijklmnop'[i]#testa、testb等。
数据帧=数据帧[i]
dataframe.to_excel(编写器,工作表名称=工作表名称,索引=False)
工作表=编写器.工作表[工作表名称]
....
#所有其他的东西都在下面,直到。。。
工作表.插入图表('G2',图表)
#现在我们已经完成了循环
writer.save()
这是使用循环的好地方。例如:
#您只需要其中一个
excel_文件='test.xlsx'
writer=pd.ExcelWriter(excel\u文件,engine='xlsxwriter')
工作簿=writer.book
数据帧=(df_a,df_b)
#循环浏览我们的数据帧列表
对于范围内的i(len(数据帧)):
工作表名称='test'+'abcdefghijklmnop'[i]#testa、testb等。
数据帧=数据帧[i]
dataframe.to_excel(编写器,工作表名称=工作表名称,索引=False)
工作表=编写器.工作表[工作表名称]
....
#所有其他的东西都在下面,直到。。。
工作表.插入图表('G2',图表)
#现在我们已经完成了循环
writer.save()
我刚刚复制并粘贴了您的代码,并更改了一些内容。
我不知道你有什么问题,也许你在重写什么
excel_file_a = 'test.xlsx'
sheet_name_a = 'testA'
sheet_name_b = 'testB'
writer = pd.ExcelWriter(excel_file_a, engine='xlsxwriter')
df_a.to_excel(writer, sheet_name=sheet_name_a,index=False)
df_b.to_excel(writer, sheet_name=sheet_name_b,index=False)
workbook = writer.book
worksheet_a = writer.sheets[sheet_name_a]
worksheet_b = writer.sheets[sheet_name_b]
chart_a= workbook.add_chart({'type': 'column', 'subtype': 'stacked'})
chart_b= workbook.add_chart({'type': 'column', 'subtype': 'stacked'})
for col_num in range(1, 4):
chart_a.add_series({
'name': ['testA', 0, col_num],
'categories': ['testA', 1, 0, 5, 0],
'values': ['testA', 1, col_num, 5, col_num],
'gap': 2,
})
for col_num in range(1, 4):
chart_b.add_series({
'name': ['testB', 0, col_num],
'categories': ['testB', 1, 0, 5, 0],
'values': ['testB', 1, col_num, 5, col_num],
'gap': 2,
})
worksheet_a.insert_chart('G2', chart_a)
worksheet_b.insert_chart('G3', chart_b)
writer.save()
我刚刚复制并粘贴了您的代码,并更改了一些内容。 我不知道你有什么问题,也许你在重写什么
excel_file_a = 'test.xlsx'
sheet_name_a = 'testA'
sheet_name_b = 'testB'
writer = pd.ExcelWriter(excel_file_a, engine='xlsxwriter')
df_a.to_excel(writer, sheet_name=sheet_name_a,index=False)
df_b.to_excel(writer, sheet_name=sheet_name_b,index=False)
workbook = writer.book
worksheet_a = writer.sheets[sheet_name_a]
worksheet_b = writer.sheets[sheet_name_b]
chart_a= workbook.add_chart({'type': 'column', 'subtype': 'stacked'})
chart_b= workbook.add_chart({'type': 'column', 'subtype': 'stacked'})
for col_num in range(1, 4):
chart_a.add_series({
'name': ['testA', 0, col_num],
'categories': ['testA', 1, 0, 5, 0],
'values': ['testA', 1, col_num, 5, col_num],
'gap': 2,
})
for col_num in range(1, 4):
chart_b.add_series({
'name': ['testB', 0, col_num],
'categories': ['testB', 1, 0, 5, 0],
'values': ['testB', 1, col_num, 5, col_num],
'gap': 2,
})
worksheet_a.insert_chart('G2', chart_a)
worksheet_b.insert_chart('G3', chart_b)
writer.save()
您好,我测试了您的方法,只得到df_a.ahh nvm的结果,这是因为最后一个writer.save()上的缩进。现在就去拿,谢谢你的帮助!您好,我测试了您的方法,只得到df_a.ahh nvm的结果,这是因为最后一个writer.save()上的缩进。现在就去拿,谢谢你的帮助!是的,最初我也尝试过这种方法,但我只得到了df_a。我想我可能在重写某些内容。无论如何谢谢你!是的,最初我也尝试过这种方法,但我只得到了df_a。我想我可能在重写某些内容。无论如何谢谢你!