在使用Pandas處理Excel檔案時,如果需要在已有的Excel檔案中向下新增新資料,可以使用 openpyxl
作為引擎來實現這一功能。下面是具體的步驟和程式碼示例:
- 讀取已有的Excel檔案:使用
pd.read_excel
讀取已有的Excel檔案和資料。 - 準備新資料:將新資料整理為DataFrame。
- 將新資料追加到已有的資料中:透過
pd.concat
將新資料和已有的資料進行合併。 - 將合併後的資料寫回到Excel檔案中:使用
pd.ExcelWriter
和openpyxl
引擎將資料寫回到Excel檔案中。
import pandas as pd
from openpyxl import load_workbook
# 讀取已有的Excel檔案
file_path = 'existing_file.xlsx'
existing_data = pd.read_excel(file_path, sheet_name='Sheet1')
# 新的資料
new_data = {
'Column1': [value1, value2, value3],
'Column2': [value4, value5, value6],
# 新增更多列和資料
}
new_df = pd.DataFrame(new_data)
# 將新資料追加到已有的資料中
combined_data = pd.concat([existing_data, new_df], ignore_index=True)
# combined_data.index = ...
# 將合併後的資料寫回到Excel檔案中
with pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='overlay') as writer:
combined_data.to_excel(writer, sheet_name='Sheet1', index=False)
print("Data has been appended successfully.")
程式碼解讀:
讀取已有的Excel檔案:
existing_data = pd.read_excel(file_path, sheet_name='Sheet1')
這一步讀取了名為 existing_file.xlsx
的Excel檔案中的 Sheet1
表,並將其儲存在 existing_data
DataFrame 中。
準備新資料:
new_data = {
'Column1': [value1, value2, value3],
'Column2': [value4, value5, value6],
# 新增更多列和資料
}
new_df = pd.DataFrame(new_data)
將新資料組織成字典形式,並轉換為DataFrame。
合併資料:
combined_data = pd.concat([existing_data, new_df], ignore_index=True)
使用 pd.concat
將新資料和已有資料進行合併。ignore_index=True
引數確保索引被重置。
寫回Excel檔案:
with pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='overlay') as writer:
combined_data.to_excel(writer, sheet_name='Sheet1', index=False)
使用 pd.ExcelWriter
將合併後的資料寫回原Excel檔案中。engine='openpyxl'
指定了使用openpyxl引擎,mode='a'
表示追加模式,if_sheet_exists='overlay'
表示如果工作表存在則覆蓋寫入。
官方連結:
https://pandas.pydata.org/docs/reference/api/pandas.ExcelWriter.html
mode, default ‘w’
File mode to use (write or append). Append does not work with fsspec URLs.
if_sheet_exists, default ‘error’
How to behave when trying to write to a sheet that already exists (append mode only).
- error: raise a ValueError.
- new: Create a new sheet, with a name determined by the engine.
- replace: Delete the contents of the sheet before writing to it.
- overlay: Write contents to the existing sheet without first removing, but possibly over top of, the existing contents.