本篇文章同步發布於 Python pandas 使用 concat 將不同 DataFrame 垂直連接在一起【Python 處理 Excel #14】
當有多份 Excel 檔案標題欄位一樣,只是因為時間、版本等因素有多份檔案存在,如果某個時刻需要將這些不同的檔案資料放在一起,除了一個個打開檔案將資料複製到同一個活頁簿中,也可以使用 Python pandas 的 concat
方法將不同的檔案資料合併在一起。這篇文章介紹 Python pandas 的 concat
方法。
公司每個月發布一次該月對未來的銷售預測資料,不同月份的銷售預測資料會以不同的版本編碼 (version) 表示,例如 S1 表示 1 月的銷售預測資料,S2 表示 2 月的銷售預測資料,S3 表示 3 月的銷售預測資料,以此類推。下方是其中一個銷售預測檔案的部分資料 (含標題):
create_date | version | period | customer_name | product | quantity |
---|---|---|---|---|---|
2024/2/1 | S2 | 2024/004 | Coolify | Laptop Pro | 500 |
2024/2/1 | S2 | 2024/004 | Coolify | Ultrabook | 300 |
2024/2/1 | S2 | 2024/004 | Nexida | Laptop Pro | 100 |
2024/2/1 | S2 | 2024/004 | Stella Tech | Laptop Pro | 300 |
資料中的 period
欄位表示針對哪個年份/月份進行銷售預測。現在電腦的某個資料夾有多個版本的銷售預測資料,希望透過 Python 將這些檔案合併在同一份檔案。
從一個簡單的例子開始:假設有兩個明確知道檔案位置的 Excel 檔案,下方程式碼能將這兩個 Excel 檔案合併在一起:
import pandas as pd
# 讀取兩個 Excel 檔案
df1 = pd.read_excel('path_to_file/S1_forecast.xlsx')
df2 = pd.read_excel('path_to_file/S2_forecast.xlsx')
# 使用 pandas concat 合併兩個 DataFrame
merged_df = pd.concat([df1, df2])
# 輸出合併後的結果
print(merged_df.head())
df1
和 df2
這兩個 DataFrame 合併成一個新的 DataFrame。concat
方法預設是保有原本的欄位結構,將 df1
和 df2
的所有列合併在一起。接下來例子會用 pandas 的 concat
方法將新的銷售預測資料新增到現有的 DataFrame 中。
# 讀取已存在的 Excel 檔案
df = pd.read_excel('path_to_file/S1_forecast.xlsx')
# 定義一組新的銷售資料,使用 Series 表示
new_row = pd.Series({
'create_date': '2024/2/1',
'version': 'S2',
'period': '2024/004',
'customer_name': 'Quick Computer',
'product': 'Gaming Laptop',
'quantity': 150
})
# 使用 concat 將新的 row 加入 DataFrame 中
updated_df = pd.concat([df, new_row.to_frame().T], ignore_index=True)
# 輸出更新後的 DataFrame
print(updated_df.tail())
concat
需要一個 DataFrame 作為參數。實務上我個人常將相同性質的檔案放在同一個資料夾,這個案例的銷售預測檔案也一樣。現在有一個資料夾包含了不同版本的銷售預測檔案,下方程式碼動態讀取這些 Excel 檔案並將它們合併成一個單一的 DataFrame。
import os
import pandas as pd
# 指定包含 Excel 檔案的資料夾路徑
folder_path = 'path_to_folder/'
# 動態讀取資料夾中的所有 Excel 檔案
file_list = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.endswith('.xlsx')]
# 讀取所有 Excel 檔案並儲存在 DataFrame 列表中
df_list = [pd.read_excel(file) for file in file_list]
# 使用 concat 合併所有 DataFrame,並忽略索引
merged_df = pd.concat(df_list, ignore_index=True)
# 輸出最終合併後的 DataFrame
print(merged_df.head())
['S1_forecast.xlsx', 'S2_forecast.xlsx', ...]
。file_list
中逐一取出每個檔案路徑,並將每個檔案應用到 pd.read_excel()
方法中。df_list
可能會是 [DataFrame1, DataFrame2, DataFrame3]
的結構,每個 DataFrame 分別代表不同的銷售預測資料。concat
方法可以將多個 DataFrame 合併為一個 DataFrame。ignore_index=True
可以避免索引重複。concat
方法可以在現有的 DataFrame 中新增新列資料。本篇文章同步發布於 Python pandas 使用 concat 將不同 DataFrame 垂直連接在一起【Python 處理 Excel #14】