Je souhaite exporter plusieurs graphiques que j'ai créés à l'aide de xlsxwriter dans plusieurs feuilles en un seul fichier Excel. J'ai deux cadres de données comme ci-dessous:
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]})
J'ai réussi à créer un fichier Excel, à savoir "test.xlsx" qui contient df_a et son graphique à barres empilées correspondant en utilisant le code ci-dessous:
#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()
Cependant, je veux également df_b et son graphique à barres empilé respectif dans le même fichier Excel, "test.xlsx" mais dans une feuille différente, disons sheetname = testB.
2 réponses
C'est un bon endroit pour utiliser une boucle. Par exemple:
# You only need one of each of these
excel_file = 'test.xlsx'
writer = pd.ExcelWriter(excel_file_a, engine='xlsxwriter')
workbook = writer.book
dataframes = (df_a, df_b)
# Loop through our list of dataframes
for i in range(len(dataframes)):
sheet_name = 'test' + 'abcdefghijklmnop'[i] # testa, testb, etc.
dataframe = dataframes[i]
dataframe.to_excel(writer, sheet_name=sheet_name, index=False)
worksheet = writer.sheets[sheet_name]
....
# all of the other stuff down as far as...
worksheet.insert_chart('G2', chart)
# Now that we have finished our loop
writer.save()
Je viens de faire un copier-coller de votre code et de changer deux ou trois choses. Je ne sais pas quel était votre problème, peut-être que vous écrasiez quelque chose.
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()
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.