基于Python讀取多個(gè)excel豎向拼接為一個(gè)excel的實(shí)現(xiàn)方法
在Python中,可以使用pandas庫(kù)結(jié)合glob模塊來(lái)遍歷讀取多個(gè)Excel文件,并將它們豎向拼接為一個(gè)DataFrame對(duì)象。以下是完整的實(shí)現(xiàn)方法:
方法1:使用glob匹配文件 + pd.concat()
import pandas as pd
import glob
# 1. 獲取所有Excel文件路徑(支持.xlsx和.xls)
excel_files = glob.glob('*.xlsx') + glob.glob('*.xls') # 當(dāng)前目錄下所有Excel文件
# 或者指定路徑:glob.glob('/path/to/files/*.xlsx')
# 2. 讀取并拼接所有Excel文件
dfs = []
for file in excel_files:
df = pd.read_excel(file) # 可以添加參數(shù)如sheet_name='Sheet1'
dfs.append(df)
# 3. 豎向拼接所有DataFrame
result = pd.concat(dfs, ignore_index=True)
# 4. 查看結(jié)果
print(result)
# 保存為一個(gè)xlsx
result.to_excel('匯總.xlsx')
方法2:使用列表推導(dǎo)式(更簡(jiǎn)潔)
import pandas as pd
import glob
# 讀取并拼接所有Excel文件
result = pd.concat([
pd.read_excel(f) for f in glob.glob('*.xlsx') + glob.glob('*.xls')
], ignore_index=True)
print(result)
# 保存為一個(gè)xlsx
result.to_excel('匯總.xlsx')
方法3:處理多個(gè)Sheet的情況
如果需要讀取每個(gè)Excel文件的多個(gè)Sheet:
import pandas as pd
import glob
dfs = []
for file in glob.glob('*.xlsx'):
# 獲取所有Sheet名稱
sheets = pd.ExcelFile(file).sheet_names
for sheet in sheets:
df = pd.read_excel(file, sheet_name=sheet)
dfs.append(df)
result = pd.concat(dfs, ignore_index=True)
# 保存為一個(gè)xlsx
result.to_excel('匯總.xlsx')
高級(jí)用法:添加文件來(lái)源列
如果需要知道每行數(shù)據(jù)來(lái)自哪個(gè)文件:
dfs = []
for file in glob.glob('*.xlsx'):
df = pd.read_excel(file)
df['source_file'] = file # 添加來(lái)源文件列
dfs.append(df)
result = pd.concat(dfs, ignore_index=True)
# 保存為一個(gè)xlsx
result.to_excel('匯總.xlsx')
注意事項(xiàng)
- 內(nèi)存管理:如果文件很大或很多,建議分批處理或使用
chunksize參數(shù) - 列一致性:確保所有Excel文件的列結(jié)構(gòu)相同,否則拼接后會(huì)出現(xiàn)很多NaN值
- 性能優(yōu)化:對(duì)于大量文件,可以使用
tqdm顯示進(jìn)度條:
from tqdm import tqdm
dfs = []
for file in tqdm(glob.glob('*.xlsx')):
dfs.append(pd.read_excel(file))
result = pd.concat(dfs, ignore_index=True)
# 保存為一個(gè)xlsx
result.to_excel('匯總.xlsx')
- 異常處理:添加try-except塊處理?yè)p壞的文件
dfs = []
for file in glob.glob('*.xlsx'):
try:
dfs.append(pd.read_excel(file))
except Exception as e:
print(f"Error reading {file}: {str(e)}")
完整示例(推薦)
import pandas as pd
import glob
def read_and_concat_excels(pattern='*.xlsx', sheet_name=0, add_source=False):
"""
讀取并拼接多個(gè)Excel文件
參數(shù):
pattern: 文件匹配模式 (如 'data/*.xlsx')
sheet_name: 要讀取的Sheet名稱或索引
add_source: 是否添加來(lái)源文件列
返回:
拼接后的DataFrame
"""
dfs = []
for file in glob.glob(pattern):
try:
df = pd.read_excel(file, sheet_name=sheet_name)
if add_source:
df['source_file'] = file
dfs.append(df)
except Exception as e:
print(f"跳過(guò)文件 {file}: {str(e)}")
if not dfs:
raise ValueError("沒(méi)有找到可讀取的Excel文件")
return pd.concat(dfs, ignore_index=True)
# 使用示例
combined_df = read_and_concat_excels(pattern='input_files/*.xlsx', add_source=True)
combined_df.to_excel('匯總.xlsx', index=False)
這種方法既健壯又靈活,可以處理大多數(shù)Excel文件拼接的場(chǎng)景。
到此這篇關(guān)于基于Python讀取多個(gè)excel豎向拼接為一個(gè)excel的實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)Python讀取多個(gè)excel拼接為一個(gè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)簡(jiǎn)單加密解密機(jī)制
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單加密解密機(jī)制,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03
使用python生成云詞圖實(shí)現(xiàn)畫紅樓夢(mèng)詞云圖
紅樓夢(mèng)相信大家都看過(guò),今天給大家介紹另一種不用搞得烏漆麻黑的方式來(lái)制作紅樓夢(mèng)的詞云圖,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-09-09
Python進(jìn)階_關(guān)于命名空間與作用域(詳解)
下面小編就為大家?guī)?lái)一篇Python進(jìn)階_關(guān)于命名空間與作用域(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
Python+OpenCV簡(jiǎn)單實(shí)現(xiàn)圖像水印的添加與去除
簡(jiǎn)單圖像水印的添加與去除方法是計(jì)算機(jī)視覺(jué)領(lǐng)域的核心知識(shí)點(diǎn)之一,掌握這項(xiàng)技能對(duì)于提升視覺(jué)算法開發(fā)效率和應(yīng)用效果至關(guān)重要,本文將詳細(xì)介紹Python中圖像水印的添加與去除的具體實(shí)現(xiàn),希望對(duì)大家有所幫助2026-05-05
python GUI庫(kù)圖形界面開發(fā)之PyQt5窗口控件QWidget詳細(xì)使用方法
這篇文章主要介紹了python GUI庫(kù)圖形界面開發(fā)之PyQt5窗口控件QWidget詳細(xì)使用方法,需要的朋友可以參考下2020-02-02
python 通過(guò)logging寫入日志到文件和控制臺(tái)的實(shí)例
下面小編就為大家分享一篇python 通過(guò)logging寫入日志到文件和控制臺(tái)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
對(duì)Keras中predict()方法和predict_classes()方法的區(qū)別說(shuō)明
這篇文章主要介紹了對(duì)Keras中predict()方法和predict_classes()方法的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
導(dǎo)入pytorch時(shí)libmkl_intel_lp64.so找不到問(wèn)題解決
這篇文章主要為大家介紹了導(dǎo)入pytorch時(shí)libmkl_intel_lp64.so找不到問(wèn)題解決示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
實(shí)例分析python3實(shí)現(xiàn)并發(fā)訪問(wèn)水平切分表
在本文中小編給大家整理了關(guān)于python3實(shí)現(xiàn)并發(fā)訪問(wèn)水平切分表的相關(guān)知識(shí)點(diǎn)以及實(shí)例代碼,有興趣的朋友們參考下。2018-09-09

