Comment sauvegarder une nouvelle feuille dans un fichier excel existant, en utilisant Pandas?
je veux utiliser des fichiers excel pour stocker des données élaborées avec python. Mon problème est que je ne peux pas ajouter des feuilles à un fichier excel existant. Je propose ici un exemple de code à utiliser pour parvenir à ce résultat
import pandas as pd
import numpy as np
path = r"C:UsersfedelDesktopexcelDataPhD_data.xlsx"
x1 = np.random.randn(100, 2)
df1 = pd.DataFrame(x1)
x2 = np.random.randn(100, 2)
df2 = pd.DataFrame(x2)
writer = pd.ExcelWriter(path, engine = 'xlsxwriter')
df1.to_excel(writer, sheet_name = 'x1')
df2.to_excel(writer, sheet_name = 'x2')
writer.save()
writer.close()
ce code sauve deux images de données à deux feuilles, nommées respectivement" x1 "et" x2". Si j'ai créer deux nouveaux DataFrames et essayez d'utiliser le même code pour ajouter deux nouvelles feuilles, 'x3' et 'x4', les données d'origine est perdue.
import pandas as pd
import numpy as np
path = r"C:UsersfedelDesktopexcelDataPhD_data.xlsx"
x3 = np.random.randn(100, 2)
df3 = pd.DataFrame(x3)
x4 = np.random.randn(100, 2)
df4 = pd.DataFrame(x4)
writer = pd.ExcelWriter(path, engine = 'xlsxwriter')
df3.to_excel(writer, sheet_name = 'x3')
df4.to_excel(writer, sheet_name = 'x4')
writer.save()
writer.close()
je veux un fichier excel avec quatre feuilles: 'x1', 'x2', 'x3', 'x4'. Je sais que' xlsxwriter 'n'est pas le seul "engine", il y a'openpyxl'. J'ai aussi vu qu'il y a déjà d'autres personnes qui ont écrit sur cette question, mais je ne peux pas comprendre comment le faire.
ici un code tiré de ce lien
import pandas
from openpyxl import load_workbook
book = load_workbook('Masterfile.xlsx')
writer = pandas.ExcelWriter('Masterfile.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
data_filtered.to_excel(writer, "Main", cols=['Diff1', 'Diff2'])
writer.save()
Ils disent que cela fonctionne, mais il est difficile de comprendre comment. Je ne comprends pas ce que "ws.intitulé", "ws", et "dict" sont dans ce contexte.
Quelle est la meilleure façon de sauvegarder "x1" et "x2", puis fermer le fichier, l'ouvrir à nouveau et ajouter "x3" et "x4"?
4 réponses
Merci. Je crois qu'un exemple pourrait être bon pour quelqu'un d'autre avez quelques question:
import pandas as pd
import numpy as np
path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"
x1 = np.random.randn(100, 2)
df1 = pd.DataFrame(x1)
x2 = np.random.randn(100, 2)
df2 = pd.DataFrame(x2)
writer = pd.ExcelWriter(path, engine = 'xlsxwriter')
df1.to_excel(writer, sheet_name = 'x1')
df2.to_excel(writer, sheet_name = 'x2')
writer.save()
writer.close()
ici, je génère un fichier excel, d'après ce que j'ai compris, peu importe qu'il soit généré via le moteur "xslxwriter" ou "openpyxl".
quand je veux écrire sans perdre les données originales alors
import pandas as pd
import numpy as np
from openpyxl import load_workbook
path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"
book = load_workbook(path)
writer = pd.ExcelWriter(path, engine = 'openpyxl')
writer.book = book
x3 = np.random.randn(100, 2)
df3 = pd.DataFrame(x3)
x4 = np.random.randn(100, 2)
df4 = pd.DataFrame(x4)
df3.to_excel(writer, sheet_name = 'x3')
df4.to_excel(writer, sheet_name = 'x4')
writer.save()
writer.close()
ce code fait le travail!
Dans l'exemple que vous avez partagé vous chargez le fichier existant dans book
et le writer.book
valeur book
. À la ligne writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
, vous accédez à chaque feuille du classeur sous la rubrique ws
. Le titre de la feuille est alors ws
donc vous créez un dictionnaire de {sheet_titles: sheet}
clé, paires de valeurs. Ce dictionnaire est alors définie à l'écrivain.feuille. essentiellement, ces étapes ne font que charger les données existantes de 'Masterfile.xlsx'
et peupler votre écrivain avec eux.
maintenant, disons que vous avez déjà un fichier avec x1
et x2
comme feuilles. Vous pouvez utiliser le code d'exemple pour charger le fichier et puis faire quelque chose comme ça pour ajouter x3
et x4
.
path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"
writer = pd.ExcelWriter(path, engine='openpyxl')
df3.to_excel(writer, 'x3', index=False)
df4.to_excel(writer, 'x4', index=False)
writer.save()
Qui devrait faire ce que vous cherchez.
je vous recommande fortement de travailler directement avec openpyxl car il supporte désormais Pandas DataFrames .
cela vous permet de vous concentrer sur le Code Excel et Pandas pertinents.
un exemple simple pour écrire plusieurs données pour exceller à la fois. Et aussi quand vous voulez ajouter des données à une feuille sur un fichier excel écrit (fichier excel fermé).
quand c'est la première fois que vous écrivez à un excel. (L'écriture "df1" et "df2" à "1st_sheet" et "2nd_sheet")
import pandas as pd
from openpyxl import load_workbook
df1 = pd.DataFrame([[1],[1]], columns=['a'])
df2 = pd.DataFrame([[2],[2]], columns=['b'])
df3 = pd.DataFrame([[3],[3]], columns=['c'])
excel_dir = "my/excel/dir"
with pd.ExcelWriter(excel_dir, engine='xlsxwriter') as writer:
df1.to_excel(writer, '1st_sheet')
df2.to_excel(writer, '2nd_sheet')
writer.save()
après avoir fermé votre excel, mais vous souhaitez "ajouter" des données sur le même fichier excel mais une autre feuille, disons "df3 "au nom de la feuille"3rd_sheet".
book = load_workbook(excel_dir)
with pd.ExcelWriter(excel_dir, engine='openpyxl') as writer:
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
## Your dataframe to append.
df3.to_excel(writer, '3rd_sheet')
writer.save()
notez que le format excel ne doit pas être xls, vous pouvez utiliser xlsx one.