Python高效合并Excel多Sheet工作表
在日常辦公中,我們經(jīng)常會(huì)遇到一個(gè)Excel文件里包含多個(gè)工作表的情況,比如按日期、按部門分類的數(shù)據(jù)。如果要對(duì)這些數(shù)據(jù)進(jìn)行匯總分析,手動(dòng)復(fù)制粘貼不僅耗時(shí),還容易出現(xiàn)疏漏。

今天就給大家分享一個(gè)實(shí)用的Python代碼,能一鍵合并Excel中的所有工作表,讓數(shù)據(jù)處理效率大幅提升。
完整代碼
以下是實(shí)現(xiàn)該功能的完整代碼,大家可以直接復(fù)制使用:
import pandas as pd
import os
def merge_excel_sheets(excel_file_path, output_file_path=None):
"""
讀取 Excel 文件中的所有 sheet 頁數(shù)據(jù)并匯總到一個(gè) DataFrame 中
參數(shù):
excel_file_path: Excel 文件路徑
output_file_path: 輸出的 Excel 文件路徑,默認(rèn)為 None (不輸出到文件)
返回:
匯總后的 DataFrame
"""
# 讀取 Excel 文件中的所有 sheet
xls = pd.ExcelFile(excel_file_path)
sheet_names = xls.sheet_names
# 創(chuàng)建一個(gè)空的 DataFrame 列表,用于存儲(chǔ)每個(gè) sheet 的數(shù)據(jù)
dfs = []
# 遍歷每個(gè) sheet
for sheet_name in sheet_names:
# 讀取當(dāng)前 sheet 的數(shù)據(jù)
df = pd.read_excel(excel_file_path, sheet_name=sheet_name)
# 添加一列標(biāo)識(shí)數(shù)據(jù)來源的 sheet 名稱
df['Sheet_Name'] = sheet_name
# 將當(dāng)前 sheet 的 DataFrame 添加到列表中
dfs.append(df)
# 將所有 DataFrame 合并成一個(gè)
merged_df = pd.concat(dfs, ignore_index=True)
# 如果指定了輸出路徑,則保存到文件
if output_file_path:
merged_df.to_excel(output_file_path, index=False)
print(f"已將匯總數(shù)據(jù)保存到: {output_file_path}")
return merged_df
# 使用示例
if __name__ == "__main__":
# 替換為你的 Excel 文件路徑
input_file = "范例1.xlsx"
output_file = "merged_data.xlsx"
# 確保輸入文件存在
if os.path.exists(input_file):
# 匯總數(shù)據(jù)并保存到新文件
result_df = merge_excel_sheets(input_file, output_file)
# 打印匯總結(jié)果的前幾行
print("匯總數(shù)據(jù)預(yù)覽:")
print(result_df.head())
# 打印每個(gè) sheet 的行數(shù)統(tǒng)計(jì)
print("\n各 Sheet 數(shù)據(jù)行數(shù):")
sheet_counts = result_df['Sheet_Name'].value_counts()
for sheet, count in sheet_counts.items():
print(f"{sheet}: {count} 行")
print(f"\n總計(jì): {len(result_df)} 行數(shù)據(jù)")
else:
print(f"文件不存在: {input_file}")
代碼解析
1. 依賴庫導(dǎo)入
代碼開頭導(dǎo)入了兩個(gè)必要的庫:
pandas:強(qiáng)大的數(shù)據(jù)處理庫,用于讀取Excel文件和處理數(shù)據(jù)os:用于進(jìn)行文件路徑相關(guān)的操作,這里主要用來檢查輸入文件是否存在
2. 核心函數(shù):merge_excel_sheets
這是實(shí)現(xiàn)數(shù)據(jù)合并的核心函數(shù),我們來逐步解析其工作流程:
步驟1:獲取所有工作表名稱xls = pd.ExcelFile(excel_file_path)
sheet_names = xls.sheet_names通過pd.ExcelFile方法讀取Excel文件,再通過sheet_names屬性獲取該文件中所有工作表的名稱,為后續(xù)遍歷做準(zhǔn)備。
步驟2:遍歷處理每個(gè)工作表for sheet_name in sheet_names:
df = pd.read_excel(excel_file_path, sheet_name=sheet_name)
df['Sheet_Name'] = sheet_name
dfs.append(df)- 循環(huán)遍歷每個(gè)工作表名稱,使用`pd.read_excel`讀取對(duì)應(yīng)工作表的數(shù)據(jù),得到一個(gè)DataFrame
- 為當(dāng)前DataFrame添加一個(gè)
Sheet_Name列,記錄該數(shù)據(jù)來自哪個(gè)工作表,方便后續(xù)溯源 - 將處理好的DataFrame添加到列表
dfs中暫存
步驟3:合并所有數(shù)據(jù)
merged_df = pd.concat(dfs, ignore_index=True)
使用`pd.concat`方法將列表中所有的DataFrame合并成一個(gè),`ignore_index=True`表示合并后重新生成索引,避免索引重復(fù)。
步驟4:保存合并結(jié)果(可選)if output_file_path:
merged_df.to_excel(output_file_path, index=False)
print(f"已將匯總數(shù)據(jù)保存到: {output_file_path}")如果指定了輸出文件路徑,就將合并后的DataFrame保存為Excel文件,`index=False`表示不保存索引列。
3. 使用示例
代碼最后部分是使用示例,主要做了這些事:
- 定義輸入文件和輸出文件的路徑
- 檢查輸入文件是否存在,避免報(bào)錯(cuò)
- 調(diào)用合并函數(shù)進(jìn)行數(shù)據(jù)處理
- 輸出合并結(jié)果的預(yù)覽、各工作表數(shù)據(jù)行數(shù)統(tǒng)計(jì)和總數(shù)據(jù)量
如何使用該代碼
1.安裝依賴庫:首先確保安裝了pandas庫,如果沒有安裝,可運(yùn)行以下命令:
pip install pandas openpyxl
(openpyxl是pandas處理xlsx格式文件所需的依賴)
2.準(zhǔn)備Excel文件:將需要合并的Excel文件準(zhǔn)備好,記住其路徑。
3.修改文件路徑:在代碼的if __name__ == "__main__":部分,將input_file和output_file替換為實(shí)際的文件路徑,例如:
input_file = "C:/data/各部門數(shù)據(jù).xlsx" output_file = "C:/data/全公司數(shù)據(jù)匯總.xlsx"
4.運(yùn)行代碼:執(zhí)行Python腳本,等待程序運(yùn)行完成。運(yùn)行成功后,會(huì)在控制臺(tái)輸出匯總數(shù)據(jù)預(yù)覽和統(tǒng)計(jì)信息,同時(shí)在指定路徑生成合并后的Excel文件。
有了這個(gè)代碼,再也不用手動(dòng)一個(gè)個(gè)復(fù)制粘貼工作表數(shù)據(jù)了,尤其適合需要經(jīng)常處理多工作表Excel文件的辦公人士。
到此這篇關(guān)于Python高效合并Excel多Sheet工作表的文章就介紹到這了,更多相關(guān)Python合并Excel工作表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python爬蟲使用實(shí)例wallpaper問題記錄
本文介紹解決中文亂碼的方法,以及Python爬蟲處理數(shù)據(jù)、圖片URL的技巧,包括使用正則表達(dá)式處理字符串、URL替換等,還涉及單線程與多線程的應(yīng)用場景,如電腦壁紙和手機(jī)壁紙爬取,適合進(jìn)行Web數(shù)據(jù)抓取和處理的開發(fā)者參考2024-09-09
Python矩陣常見運(yùn)算操作實(shí)例總結(jié)
這篇文章主要介紹了Python矩陣常見運(yùn)算操作,結(jié)合實(shí)例形式總結(jié)分析了Python矩陣的創(chuàng)建以及相乘、求逆、轉(zhuǎn)置等相關(guān)操作實(shí)現(xiàn)方法,需要的朋友可以參考下2017-09-09
Python+Django+MySQL實(shí)現(xiàn)基于Web版的增刪改查的示例代碼
這篇文章主要介紹了Python+Django+MySQL實(shí)現(xiàn)基于Web版的增刪改查的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05

