Câu hỏi cũ, nhưng tôi đoán một số người vẫn tìm kiếm điều này - vì vậy ...
Tôi thấy phương pháp này hay vì tất cả các trang tính đều được tải vào một từ điển gồm tên trang tính và các cặp khung dữ liệu, được tạo bởi gấu trúc với tùy chọn sheetname = None. Thật đơn giản để thêm, xóa hoặc sửa đổi trang tính giữa việc đọc bảng tính sang định dạng dict và viết lại từ dict. Đối với tôi, xlsxwriter hoạt động tốt hơn openpyxl cho tác vụ cụ thể này về tốc độ và định dạng.
Lưu ý: các phiên bản gấu trúc trong tương lai (0.21.0+) sẽ thay đổi tham số "sheetname" thành "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)
Ví dụ trong câu hỏi năm 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)