馬珊珊
摘要:論文介紹了利用python進(jìn)行日常excel表格批量處理的方法,并以員工福利采購統(tǒng)計數(shù)據(jù)為例,編程實現(xiàn)了excel文件的批量讀取、切片、計算、合并等功能。結(jié)果表明,采用python進(jìn)行批量處理文件,簡單高效,大大提高了辦公的效率。
關(guān)鍵詞:excel數(shù)據(jù)處理;python;pandas
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2018)01-0228-02
隨著辦公無紙化、信息網(wǎng)絡(luò)化的興起,工作中絕大多數(shù)工作都由計算機(jī)來處理。對于在辦公室工作的同志來講,日常工作多是搜集、整理、計算數(shù)據(jù)。這些日常收集的數(shù)據(jù)以Excel表格為主,往往格式統(tǒng)一、處理任務(wù)單一,如果依靠手工來完成,任務(wù)量較大,且容易出錯。Excel自帶了一些批處理功能,但是功能有限,不能滿足工作中各種各樣的文件批處理要求。本文以常見的excel數(shù)據(jù)為例,采用python程序設(shè)計語言,介紹了采用python語言進(jìn)行數(shù)據(jù)批量處理的方法。python語言語法簡單,簡單的幾行代碼就可以完成復(fù)雜的任務(wù),適合辦公室工作人員使用。
1 問題描述
以某單位年終福利采購為例。某單位擬年終采購一批物品作為職工福利,需要采集的物品有6種,每種的價格如表1所示,員工需要填寫的統(tǒng)計表格如表2所示,其中員工的名字體現(xiàn)在統(tǒng)計表格的文件名字中,如圖1所示。
現(xiàn)在辦公室需要搜集整個公司每位員工的統(tǒng)計表,根據(jù)數(shù)量和單價計算出相應(yīng)的金額,并計算出總價填寫在相應(yīng)的位置,并把所有人員的購物數(shù)據(jù)匯總到一個excel表中。
2 解決該問題的基本思路與方法
該問題是辦公室日常工作中的典型問題,搜集到的數(shù)據(jù)是excel表格文件,每位員工對應(yīng)著一個excel文件,編程時需要對每一個文件進(jìn)行遍歷,提取出員工的姓名及填寫的數(shù)據(jù),根據(jù)員工填寫的數(shù)據(jù)及商品的價格,計算出總價,并合并表格。
采用編程解決,可以歸結(jié)為如下幾類問題:
1) 文件遍歷:
python中有關(guān)文件夾與文件的查找,刪除等功能 在os模塊中實現(xiàn)。使用時需先導(dǎo)入OS模塊,OS模塊中的os.listdir(path)可以列出path目錄下的所有文件,存放在一個列表中,對該列表進(jìn)行遍歷,即可以實現(xiàn)文件的遍歷。使用該方法需要首先導(dǎo)入OS模塊。
2) excel文件處理
pandas是python的數(shù)據(jù)分析包,它讀取數(shù)據(jù)簡單高效,有獨特的數(shù)據(jù)類型DataFrame,在數(shù)據(jù)處理中十分常用[1]。本文采用pandas讀寫并處理excel文件。本例中,主要涉及的操作有:文件的讀取、數(shù)據(jù)區(qū)域的篩選、求和計算、數(shù)據(jù)的拼接。
l 文件的讀取:panmdas支持許多格式數(shù)據(jù)的讀取。其中excel數(shù)據(jù)讀取代碼為:
df=pd.read_excel(fullname) 其中fullname代表要讀取文件的全名。讀入數(shù)據(jù)后,存放在df中。df是一個dataframe類型的變量。
l 數(shù)據(jù)區(qū)域的選擇:
讀入的數(shù)據(jù)是一個dataframe類型的變量,本質(zhì)上是一個二維表格。excel數(shù)據(jù)的選擇對應(yīng)著dataframe類型變量的切片操作。dataframe類型變量的切片方法如下:
選取一行數(shù)據(jù):df.ix[i,:] 選擇第i行數(shù)據(jù)
選擇多行數(shù)據(jù):df.ix[a:b,:] 選擇第a行開始到b-1行結(jié)束的數(shù)據(jù)
選擇某行某列數(shù)據(jù):df.ix[a:b,m:n] 選擇a行開始到b-1行,m列到n-1列的數(shù)據(jù)
l 求和計算
pandas提供了數(shù)據(jù)求和函數(shù),sum函數(shù)。具體使用方法參考下面文中的實現(xiàn)代碼
l 數(shù)據(jù)的拼接:采用append方法。
本例中的完整代碼如下:
import pandas as pd #導(dǎo)入pandas模塊進(jìn)行excel文件的讀寫預(yù)處理
import os #導(dǎo)入OS模塊對文件進(jìn)行遍歷
path,name,data =[],[],[]
for i in os.listdir(path1):# path1是存放excel數(shù)據(jù)的路徑名
ifi[0]=='2':
path.append(path1+'/'+i)
name.append(i[10:-4])#讀取員工的姓名信息
for j in path: #對路徑中的excel文件進(jìn)行遍歷
f=pd.read_excel(j)#讀取文件
sp=f.ix[4,2:13:2]*pd.Series([159,158,288,178,180,368],index=f.ix[4,2:13:2].index)#計算每種商品的價格
sp.index=f.ix[4,3:14:2].index
f.ix[4,3:14:2]=sp選擇每種商品的價格
f.ix[4,14]=sp.sum()計算每位員工的總價
data.append(f.ix[4,2:15])#合并數(shù)據(jù)
f.ix[4:4+len(os.listdir(path1)),2:15]=data
f.ix[4: 4+len(os.listdir(path1),1]=name
f.to_excel('/Users/neo/Desktop/demo.xls',index=False)#將結(jié)果保存成excel文件
3) 結(jié)果
運行以上程序,得到的結(jié)果如表3所示。從表3可以看出,每位員工的采購物品的價格都已被計算出來并合并起來,達(dá)到了我們想要的結(jié)果。對本文的代碼稍加改進(jìn),就可以完成其他的表格處理工作。大大提高了辦公效率。
3 結(jié)論
本文介紹了利用python處理excel數(shù)據(jù),主要包括采用OS模塊對文件進(jìn)行遍歷,采用pandas模塊實現(xiàn)excel數(shù)據(jù)存取、選擇、運算。從論文的實例可見,采用python進(jìn)行excel文件處理工作,簡單方便,大大提高了工作效率。
參考文獻(xiàn):
[1] 王全勝. Python在校園數(shù)據(jù)分析中的應(yīng)用——以一卡通消費為例[J].電腦知識與技術(shù),2017,13(9):1-2,6.
[2] 張雷. Python與Spark集群在收費數(shù)據(jù)分析中的應(yīng)用[J].中國交通信息化,2017(3):122-123,132.endprint