用Python批量處理Excel文件,實現自動化辦公
一、具體需求
有以下N個表,每個表的結構一樣,如下:
需要把所有表數據匯總,把每個人的得分、積分分別加起來,然后按總積分排名,總積分一致時,名次一致且非連續排序;積分一致的前提下,按總得分降序展示,但不改變排名,結果如下:
二、Python開發
1、導入所需的包
import pandas as pd
import glob
2、獲取所有Excel文件的文件路徑
excel_files = glob.glob("./樣例數據/*.xlsx")
3、將各表數據合并到主DataFrame
# 初始化一個空DataFrame
merged_df = pd.DataFrame()
# 循環讀取每個Excel文件并合并到DataFrame
for file in excel_files:
df = pd.read_excel(file, header=1) # 讀取Excel文件,跳過第一行數據
merged_df = merged_df._append(df, ignore_index=True) # 合并到主DataFrame
4、計算總積分和總排名
merged_df['總得分'] = merged_df.groupby('姓名')['月度得分'].transform('sum') # 計算得分總和
merged_df['總積分'] = merged_df.groupby('姓名')['積分'].transform('sum') # 計算積分總和
merged_df.drop_duplicates(subset=['姓名', '總積分'], keep='first', inplace=True) # 去重
5、以總積分排名
merged_df['總排名'] = merged_df['總積分'].rank(ascending=False, method='min')
6、按總積分列的值進行排序,重置索引
merged_df = merged_df.sort_values(by=['總積分','總得分'], ascending=[False,False]).reset_index(drop=True)
7、獲取需要輸出的結果???????
result_df = pd.DataFrame()
result_df = merged_df.loc[:, ['姓名','總得分','總積分','總排名']].copy()
8、將合并后的DataFrame輸出到一個新Excel文件
result_df.to_excel("總積分及排名.xlsx", index=False)
匯總代碼展示如下
import pandas as pdimport globexcel_files = glob.glob("./樣例數據/*.xlsx")# 初始化一個空DataFrame
merged_df = pd.DataFrame()# 循環讀取每個Excel文件并合并到DataFrame append() 方法在DataFrame的末尾添加一行或一列數據 新版本修改為 _append()
for file in excel_files:df = pd.read_excel(file, header=1) # 讀取Excel文件,跳過第一行數據merged_df = merged_df._append(df, ignore_index=True) # 合并到主DataFramemerged_df['總得分'] = merged_df.groupby('姓名')['月度得分'].transform('sum') # 計算得分總和
merged_df['總積分'] = merged_df.groupby('姓名')['積分'].transform('sum') # 計算積分總和
merged_df.drop_duplicates(subset=['姓名', '總積分'], keep='first', inplace=True) # 去重merged_df['總排名'] = merged_df['總積分'].rank(ascending=False, method='min')merged_df = merged_df.sort_values(by=['總積分','總得分'], ascending=[False,False]).reset_index(drop=True)result_df = pd.DataFrame()
result_df = merged_df.loc[:, ['姓名','總得分','總積分','總排名']].copy()result_df.to_excel('./樣例數據/總排名.xlsx', index=False)
?