向已有的excel表中追加資料儲存(表頭一致)

Amiyai發表於2024-06-22

在使用Pandas處理Excel檔案時,如果需要在已有的Excel檔案中向下新增新資料,可以使用 openpyxl 作為引擎來實現這一功能。下面是具體的步驟和程式碼示例:

  1. 讀取已有的Excel檔案:使用 pd.read_excel 讀取已有的Excel檔案和資料。
  2. 準備新資料:將新資料整理為DataFrame。
  3. 將新資料追加到已有的資料中:透過 pd.concat 將新資料和已有的資料進行合併。
  4. 將合併後的資料寫回到Excel檔案中:使用 pd.ExcelWriteropenpyxl 引擎將資料寫回到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.

相關文章