คำถามเก่า แต่ฉันเดาว่าบางคนยังคงค้นหาสิ่งนี้ - ดังนั้น ...
ฉันคิดว่าวิธีนี้ดีเพราะแผ่นงานทั้งหมดถูกโหลดลงในพจนานุกรมของชื่อชีตและคู่ดาต้าเฟรมที่สร้างโดยแพนด้าด้วยตัวเลือก sheetname = None การเพิ่มลบหรือแก้ไขเวิร์กชีตนั้นทำได้ง่ายมากระหว่างการอ่านสเปรดชีตในรูปแบบ dict และเขียนกลับจาก dict สำหรับฉัน xlsxwriter ทำงานได้ดีกว่า openpyxl สำหรับงานนี้ในแง่ของความเร็วและรูปแบบ
หมายเหตุ: แพนด้าเวอร์ชันในอนาคต (0.21.0+) จะเปลี่ยนพารามิเตอร์ "sheetname" เป็น "sheet_name"
# read a single or multi-sheet excel file
# (returns dict of sheetname(s), dataframe(s))
ws_dict = pd.read_excel(excel_file_path,
sheetname=None)
# all worksheets are accessible as dataframes.
# easy to change a worksheet as a dataframe:
mod_df = ws_dict['existing_worksheet']
# do work on mod_df...then reassign
ws_dict['existing_worksheet'] = mod_df
# add a dataframe to the workbook as a new worksheet with
# ws name, df as dict key, value:
ws_dict['new_worksheet'] = some_other_dataframe
# when done, write dictionary back to excel...
# xlsxwriter honors datetime and date formats
# (only included as example)...
with pd.ExcelWriter(excel_file_path,
engine='xlsxwriter',
datetime_format='yyyy-mm-dd',
date_format='yyyy-mm-dd') as writer:
for ws_name, df_sheet in ws_dict.items():
df_sheet.to_excel(writer, sheet_name=ws_name)
สำหรับตัวอย่างในคำถามปี 2013:
ws_dict = pd.read_excel('Masterfile.xlsx',
sheetname=None)
ws_dict['Main'] = data_filtered[['Diff1', 'Diff2']]
with pd.ExcelWriter('Masterfile.xlsx',
engine='xlsxwriter') as writer:
for ws_name, df_sheet in ws_dict.items():
df_sheet.to_excel(writer, sheet_name=ws_name)