python批處理excel

作為一名金融狗,小白我在上學(xué)的時(shí)候用的統(tǒng)計(jì)建模軟件是R,操作最多的數(shù)據(jù)就是csv文件,導(dǎo)致小白在現(xiàn)在學(xué)習(xí)python的時(shí)候也會(huì)習(xí)慣性地把所有的數(shù)據(jù)都轉(zhuǎn)成csv,然后只會(huì)用pandas.read_csv()。
但其實(shí)平時(shí)咱們會(huì)經(jīng)常性地需要處理excel文件,因此,學(xué)習(xí)如何用python處理excel文件是非常有必要的。
python這么牛批強(qiáng)大的語(yǔ)言,自然提供了多種處理excel文件的包,小白在此只分享自己覺得最好用的一種方式。
首先,自行創(chuàng)建一個(gè)文件夾【小白中學(xué)】,里面又包含子文件夾【小白初中】和【小白高中】?!拘“壮踔小课募A中包含【一年級(jí)】和【二年級(jí)】?jī)蓚€(gè)excel文件,【小白高中】文件夾中也包含【一年級(jí)】和【二年級(jí)】?jī)蓚€(gè)excel文件。而【一年級(jí)】和【二年級(jí)】的表結(jié)構(gòu)一樣,有【班級(jí)A】和【班級(jí)B】?jī)蓚€(gè)sheet,每個(gè)班級(jí)表包含學(xué)生基本信息(學(xué)號(hào)、姓名、生日)。




基本結(jié)構(gòu)如下:



我們先來(lái)看看文件信息:
import os

for root,dirs,files in os.walk(r'F:\小白中學(xué)'):
    for file in files:
        #獲取文件所屬目錄
        print(root)
        #文件名
        print(file)
        #獲取文件路徑
        print(os.path.join(root,file))

加載包:

import numpy as np
import pandas as pd
import xlrd
from openpyxl import load_workbook

工作路徑切換到【小白中學(xué)】這個(gè)文件夾所在的路徑:

import os
os.chdir('F:/')

任務(wù)一、將每個(gè)年級(jí)的2個(gè)班級(jí)學(xué)生匯總存到新的sheet

我們先來(lái)做第一個(gè)任務(wù):將初、高中共四個(gè)年級(jí)的四張excel班級(jí)信息分別合并,各自新增一個(gè)sheet記錄匯總的本年級(jí)學(xué)生信息。

for root,dirs,files in os.walk(r'F:\小白中學(xué)'):  
    for file in files:
        #用來(lái)存放每個(gè)excel的所有sheet匯總數(shù)據(jù)
        excel_data=pd.DataFrame()
        #獲取excel路徑和文件名
        excel_name=os.path.join(root,file)
        #讀取excel文件
        data_wb=xlrd.open_workbook(excel_name)
        #獲取文件中所有表格名
        sheet_names = data_wb.sheet_names()
        
        #在每一個(gè)excel文件中,讀取所有sheet的數(shù)據(jù),加到all_data
        for i in sheet_names:
            df = pd.read_excel(excel_name, sheet_name=i, index=False, encoding='utf8')
            excel_data=excel_data.append(df)

        #生成一個(gè)文件寫入對(duì)象,相當(dāng)于一個(gè)excel
        writer = pd.ExcelWriter(excel_name,engine='openpyxl')
        book = load_workbook(writer.path)
        writer.book = book
        #寫入一個(gè)新的sheet
        excel_data.to_excel(excel_writer=writer,sheet_name='年級(jí)全體學(xué)生信息')
        writer.save()
        writer.close()

這時(shí)候我們隨便打開一個(gè)excel(比如打開初中一年級(jí)的excel),發(fā)現(xiàn)多了一個(gè)sheet,記錄了A、B兩個(gè)班級(jí)的匯總學(xué)生信息。


任務(wù)二:將所有的學(xué)生信息匯總到一張新的excel

接下來(lái),我們來(lái)做第一個(gè)任務(wù),將初中高中總共8個(gè)班級(jí)的學(xué)生信息匯總到一張表,并存到一個(gè)excel文件中。

#用來(lái)存放匯總數(shù)據(jù)
all_data=pd.DataFrame()

for root,dirs,files in os.walk(r'F:\小白中學(xué)'):
    for file in files:
        #獲取excel路徑和文件名
        excel_name=os.path.join(root,file)
        #讀取excel文件
        data_wb=xlrd.open_workbook(excel_name)
        #獲取文件中所有表格名
        sheet_names = data_wb.sheet_names()
        
        #在每一個(gè)excel文件中,讀取前兩張sheet的數(shù)據(jù),加到all_data
        for i in [0,1]:
            df = pd.read_excel(excel_name, sheet_name=i, index=False, encoding='utf8')
            all_data=all_data.append(df)

查看匯總數(shù)據(jù):

all_data=all_data.reset_index()
all_data
all_data部分截圖

將匯總的dataframe存儲(chǔ)到一張新的excel:

all_data.to_excel(r'F:\小白中學(xué)\學(xué)生信息.xlsx',sheet_name='全校學(xué)生信息')

可以看到【小白中學(xué)】文件夾中多了一個(gè)excel文件。


任務(wù)三:將新生成的學(xué)生信息表拆成4張年級(jí)表存到一個(gè)excel

all_data=pd.read_excel(r'F:\小白中學(xué)\學(xué)生信息.xlsx',sheet_name='全校學(xué)生信息')
#初中一年級(jí)
data1=all_data.iloc[:6,:]
#初中二年級(jí)
data2=all_data.iloc[6:12,:]
#高中一年級(jí)
data3=all_data.iloc[12:18,:]
#高中二年級(jí)
data4=all_data.iloc[18:,:]

將其另存為一個(gè)excel。

with pd.ExcelWriter(r'.\小白中學(xué)\全校學(xué)生信息表.xlsx') as writer:
    data1.to_excel(writer, sheet_name='初中一年級(jí)')
    data2.to_excel(writer, sheet_name='初中二年級(jí)')
    data3.to_excel(writer, sheet_name='高中一年級(jí)')
    data4.to_excel(writer, sheet_name='高中二年級(jí)')

查看表信息


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容