2017-10-02 3 views
2

J'ai 3 jeux de données différents que je veux stocker dans 3 feuilles différentes sous le même fichier Excel. J'essaie comme ci-dessous. Existe-t-il un moyen compact de réduire la complexité de la programmation?Enregistrer 3 jeux de données différents dans 3 feuilles différentes sous le même fichier Excel

xbook = xlsxwriter.Workbook('abcd.xlsx') 
xsheet1 = xbook.add_worksheet('img_reshape') 
xsheet2 = xbook.add_worksheet('column_sum') 
xsheet3 = xbook.add_worksheet('row_sum') 

for col,array in enumerate (dataset): 
    for row,value in enumerate (array): 
    xsheet1.write(row, col, value) 
for col,array in enumerate (column_sum): 
    for row,value in enumerate (array): 
    xsheet2.write(row, col, value) 
for col,array in enumerate (row_sum): 
    for row,value in enumerate (array): 
    xsheet3.write(row, col, value) 
xbook.close() 

Répondre

1

Vous pouvez utiliser pandas (bibliothèque d'analyse des données de python) pour cette tâche.

Installez-le via pip install pandas.

import pandas as pd 
datasets = [dataset, column_sum, row_sum] 
sheet_names = ['img_reshape', 'column_sum', 'row_sum'] 
excel_filename = 'abcd.xlsx' 
with pd.ExcelWriter(excel_filename) as writer: 
    for data, sheet in zip(datasets, sheet_names): 
     df = pd.DataFrame(data) 
     df.to_excel(writer, sheet_name=sheet, header=None) 
1

Il existe un moyen plus simple de le faire. Un exemple est fourni dans la documentation de xlsxwriter (lien here).
J'ai posté un exemple ci-dessous qui est assez simple. J'ai également ajouté trois échantillons de données afin que cet exemple puisse être reproduit par n'importe qui. Il y a aussi une multitude de paramètres optionnels qui peuvent être utilisés avec dataframe.to_excel qui peuvent vous intéresser et qui sont décrits dans Documentation Pandas. (lien here).

import pandas as pd 

df_1 = pd.DataFrame({'Data_1': [10, 20, 30, ]}) 
df_2 = pd.DataFrame({'Data_2': [20, 30, 40]}) 
df_3 = pd.DataFrame({'Data_3': [30, 40, 50]}) 

# Create a Pandas Excel writer using XlsxWriter as the engine. 
writer = pd.ExcelWriter('abcd.xlsx', engine='xlsxwriter') 

# Convert the dataframe to an XlsxWriter Excel object. 
df_1.to_excel(writer, sheet_name='img_reshape') 
df_2.to_excel(writer, sheet_name='column_sum') 
df_3.to_excel(writer, sheet_name='row_sum') 


writer.save() 
1

Je recommande également Pandas mais si vous voulez le faire avec juste XlsxWriter alors vous pourriez faire quelque chose comme ceci:

import xlsxwriter 

# Some sample data. 
dataset = [[11, 12, 13, 14], 
      [21, 22, 23, 24], 
      [31, 32, 33, 34]] 

column_sum = dataset 
row_sum = dataset 

xbook = xlsxwriter.Workbook('abcd.xlsx') 
xsheet1 = xbook.add_worksheet('img_reshape') 
xsheet2 = xbook.add_worksheet('column_sum') 
xsheet3 = xbook.add_worksheet('row_sum') 

mappings = [(dataset, xsheet1), 
      (column_sum, xsheet2), 
      (row_sum, xsheet3)] 

for dataset, worksheet in mappings: 
    for row_num, row_data in enumerate(dataset): 
     for col_num, cell_data in enumerate(row_data): 
      worksheet.write(row_num, col_num, cell_data) 

xbook.close() 

Ou pour la boucle intérieure, vous pouvez le faire:

# Write the data. 
for dataset, worksheet in mappings: 
    for row_num, row_data in enumerate(dataset): 
     worksheet.write_row(row_num, 0, row_data) 
+0

est-il la bibliothèque pandas est mieux que xlsxwriter? si oui que je veux l'essayer. – krish