手把手教你用Python批量實現文件夾下所有Excel文件的第二張表合并
前言
前幾天發布了合并Excel的文章,補充篇:盤點6種使用Python批量合并同一文件夾內所有子文件夾下的Excel文件內所有Sheet數據,在留言區有個叫【有點意思】的粉絲在上面留言了兩個問題,如下圖所示。
問題:想向大佬們求教個問題,如果我有這樣的需求,如何完成:
1、將A文件中名為a的sheet和B文件中名為b的sheet合并到一個sheet中去。
2、將文件夾下所有文件的第二張表合并。我做出來了,核心部分沒有用pandas,而且邏輯比較繁瑣。想求一用pandas解決的簡潔方案。
二、解決思路
問題一和問題二的思路都挺常規的,就是取對應的表格,然后進行合并即可,這里仍然使用pandas來進行實現!
三、解決方法
問題一:將A文件中名為a的sheet和B文件中名為b的sheet合并到一個sheet中去。
這里基于之前【??(這是月亮的背面)】提供的代碼,我稍微做了些修改,代碼如下:
# coding: utf-8
# 將A文件中名為a的sheet和B文件中名為b的sheet合并到一個sheet中去
from pathlib import Path
import pandas as pd
path = r'E:\PythonCrawler\有趣的代碼\Python自動化辦公\將A文件中名為a的sheet和B文件中名為b的sheet合并到一個sheet中去'
data_ex1 = pd.read_excel('ex1.xlsx', sheet_name='df1')
data_ex2 = pd.read_excel('ex2.xlsx', sheet_name='df2')
result = pd.concat([data_ex1, data_ex2], ignore_index=True)
result.to_excel('將A文件中名為a的sheet和B文件中名為b的sheet合并到一個sheet中去.xlsx', index=False, encoding='utf-8')
print('添加和合并完成!')
代碼運行之后,會生成一個新的excel文件,如下圖所示:
合并的結果如下圖所示:
完成之后,我發給【有點意思】大佬看,不過這個答案勉強符合他的意思,他后來自己也寫了一個代碼,能滿足自己的需求,這里發給大家看看。
問題二:將文件夾下所有文件的第二張表合并
這里基于之前【??(這是月亮的背面)】提供的代碼,我稍微做了些修改,代碼如下:
# coding: utf-8
# 合并所有表格中的第二張表格
from pathlib import Path
import pandas as pd
path = Path(r'E:\PythonCrawler\有趣的代碼\Python自動化辦公\將文件夾下所有文件的第二張表合并')
data_list = []
for i in path.glob("*.xls*"):
# data = pd.read_excel(i, sheet_name='df2')
data = pd.read_excel(i, sheet_name=1)
data_list.append(data)
result = pd.concat(data_list, ignore_index=True)
result.to_excel(path.joinpath('取所有excel表的df2表進行合并.xlsx'), index=False, encoding='utf-8')
print('添加和合并完成!')
代碼運行之后,會生成一個新的excel文件,如下圖所示:
合并的結果如下圖所示:
細心的小伙伴可能發現代碼中的第9行,我其實是注釋了,一開始我測試的表格,命名規則很有規范,每個工作簿都有df1,df2,df3三張表格,所以在合并的時候直接指定了表名,但是這樣寫就會有問題,萬一有個表格中沒有df2工作表,這個代碼肯定就會報錯了,所以在【??(這是月亮的背面)】大佬的指導下,使用了sheet_name=1參數,以索引來定位第二張表格,恰到好處,前提條件是你的Excel表格中必須要有第二張表格,否則就會出現下圖的錯誤。
四、總結
我是Python進階者。本文基于粉絲針對Python處理Excel指定表格合并的提問,給出了一個利用Python基礎+pandas處理的解決方案,完全滿足了粉絲的要求。