學會一招!如何利用 pandas 批量合併 Excel?

語言: CN / TW / HK

大家好,我是菜鳥哥!

其實只需要靈活使用pandas中的pd.ExcelWriter()方法即可!

假設現在我們有df1 df2 df3三個dataframe,需要將它們儲存到同一個Excel的不同sheet中,只需要先建立一個ExcelWriter物件,然後不停寫入就行

df1 = pd.read_csv('東京奧運會獎牌資料.csv')
df2 = pd.read_excel("TOP250.xlsx")
df3 = pd.read_excel("2020年中國大學排名.xlsx")
writer = pd.ExcelWriter('test.xlsx')
df1.to_excel(writer,sheet_name="df1",index=False)
df2.to_excel(writer,sheet_name="df2",index=False)
df3.to_excel(writer,sheet_name="df3",index=False)
writer.save()

是不是和常見的檔案讀寫with方法類似,我們也可以使用同樣的方法

with pd.ExcelWriter("test1.xlsx") as xlsxwriter:
   df1.to_excel(xlsxwriter,sheet_name="df1",index=False)
   df2.to_excel(xlsxwriter,sheet_name="df2",index=False)
   df3.to_excel(xlsxwriter,sheet_name="df3",index=False)

得到的結果是一樣的,可以將多個df儲存到一個Excel中

這個方法雖然簡單好用,但是如果要儲存的 df 太多了,一個一個手動去讀取再手動去儲存就顯得十分麻煩,另外我們希望sheet是檔名,如果手動複製貼上,就更麻煩了。

這時,辦公自動化系列的文章就發揮作用了,我們先簡單拿來一個小指令碼「獲取指定目錄下的全部Excel檔名」

import os
def getfile(dirpath):
   filelist = []
   for root,dirs,files in os.walk(dirpath):
       for file in files:
           if file.endswith("xlsx") or file.endswith("csv"):
                filelist.append(os.path.join(root,file))  
   return filelist

執行一下,可以看到指定目錄下的全部Excel檔名

下面要做的,我想不用多說了「迴圈讀取,自動儲存」

filelist = getfile('/Users/liuzaoqi/Desktop/zaoqi/2022公眾號文章/如何儲存多個df')
writer = pd.ExcelWriter('test.xlsx')
for file in filelist:
   if file.endswith("xlsx"):
       df = pd.read_excel(file)
   else:
       df = pd.read_csv(file)
   df.to_excel(writer,sheet_name=file.split('/')[-1].split('.')[0],index=False)
writer.save()

現在,當前目錄下的全部Excel就自動合併到一個Excel中的不同sheet中,並且sheet名是對應的檔名

如果你對本文的內容感興趣,不妨拿走程式碼試一下。