基于Python讀取多個(gè)excel豎向拼接為一個(gè)excel的實(shí)現(xiàn)方法
在Python中,可以使用pandas庫結(jié)合glob模塊來遍歷讀取多個(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í)用法:添加文件來源列
如果需要知道每行數(shù)據(jù)來自哪個(gè)文件:
dfs = []
for file in glob.glob('*.xlsx'):
df = pd.read_excel(file)
df['source_file'] = file # 添加來源文件列
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塊處理損壞的文件
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: 是否添加來源文件列
返回:
拼接后的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"跳過文件 {file}: {str(e)}")
if not dfs:
raise ValueError("沒有找到可讀取的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+PyQt5實(shí)現(xiàn)自動(dòng)點(diǎn)擊神器
這篇文章主要為大家詳細(xì)介紹了如何利用Python和PyQt5實(shí)現(xiàn)自動(dòng)點(diǎn)擊神器,旨在解決重復(fù)性的點(diǎn)擊工作,解放雙手,具有及時(shí)性和準(zhǔn)確性,需要的可以參考下2024-01-01
關(guān)于Pycharm無法debug問題的總結(jié)
今天小編就為大家分享一篇關(guān)于Pycharm無法debug問題的總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01
python計(jì)算階乘和的方法(1!+2!+3!+...+n!)
今天小編就為大家分享一篇python計(jì)算階乘和的方法(1!+2!+3!+...+n!),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-02-02
手把手教你如何使python變?yōu)榭蓤?zhí)行文件
對(duì)于exe可執(zhí)行文件,相信大家都不陌生,下面這篇文章主要給大家介紹了關(guān)于如何使python變?yōu)榭蓤?zhí)行文件的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
python+OpenCV人臉識(shí)別考勤系統(tǒng)實(shí)現(xiàn)的詳細(xì)代碼
作為一個(gè)基于人臉識(shí)別算法的考勤系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)教程,以下內(nèi)容將提供詳細(xì)的步驟和代碼示例。本教程將使用 Python 語言和 OpenCV 庫進(jìn)行實(shí)現(xiàn),需要的朋友可以參考下2023-05-05

