1. 程式人生 > >採用python批量統計分析Excel表格資料

採用python批量統計分析Excel表格資料

       最近為了做點小事情,需要對12個Excel檔案進行處理,每個Excel檔案的資料量都非常龐大。所處理的資料是全國196個站點2000年至2011年每天的降水資料,需要根據這些資料統計出每個站點的年降水量以及每年每個月的降水量,如果純粹採用手工操作Excel表格,顯得相當的麻煩,為了簡單起見,就用python寫了個小程式來幫我自動實現批處理。

      下面就詳細的講述整個實現過程。

      1、在計算機上安裝python(x,y)2.6.6版本。這一步是確保機器上的python開發環境,具體的安裝過程在此就不在贅述,網上相關資料比較多

      2、建議安裝一個Notepad++,這樣寫程式碼比較方便

      3、在Notepad++中進行相關的設定,因為python對行縮排符比較敏感,用Tab鍵和space鍵混合使用,會導致編譯錯誤,程式無法執行;但是一般tab鍵和Space鍵所敲出來的空格是隱藏的,為了編輯方便,就需要在Notepad中將空格符顯示出來。設定如下圖所示。

     

     4、安裝相應的開發包,這裡採用的開發包為xlrd-0.9.3包(讀取excel)和xlwt-0.7.5包(存寫excel,只支援.xls格式,不支援.xlsx格式,如果需要.xlsx格式,請下載更高版本的安裝包)。具體的安裝過程在此不再贅述,請詳見點選開啟連結http://blog.csdn.net/dxh0907070012/article/details/23967247

    5、為所要處理的excel檔案單獨建立一個資料夾。

    6、具體程式碼如下:

#coding=utf-8
import xlrd
import xlwt
import string
import numpy as np
import os
class OperExcel():
	def rExcel(self,inEfile,strfilename,outfile):
		rfile=xlrd.open_workbook(inEfile)
		table=rfile.sheet_by_index(0)
		nrows=table.nrows-1
		ncols=table.ncols
		
		stationsheet=xlrd.open_workbook('D://rainfall_deal//stationposition.xlsx')
		stationtable=stationsheet.sheet_by_index(0)
		nstnrows=stationtable.nrows-1
		
		wb=xlwt.Workbook()
		ws=wb.add_sheet('year_month')
		
		month=['1','2','3','4','5','6','7','8','9','10','11','12']
		
		for stationindex in range(1,nstnrows):
			eachday_rf=[]
			yearsum=0
			monthday_rf=[]
			eachmon_rf=0
			stncode=stationtable.cell(stationindex,0).value
			#計算每個站點的年降水總量
			for r in range(1,nrows):
				if(table.cell(r,0).value==stncode):
					strvalue=table.cell(r,4).value
					eachday_rf.append(strvalue)
				if(table.cell(r,0).value!=stncode):
					continue
			for k in range(0,len(eachday_rf)):
				eachday_rainfall=int(eachday_rf[k])
				yearsum=yearsum+eachday_rainfall
			del(eachday_rf)
			ws.write(stationindex,0,stationtable.cell(stationindex,0).value)
			ws.write(stationindex,1,yearsum)
			yearsum=0
			#計算每個站點每個月的降水總量
			
			for monindex in range(0,len(month)):
				for r in range(1,nrows):
					if(int(table.cell(r,2).value)==(monindex+1) and table.cell(r,0).value==stncode):
						monthday_rf.append(table.cell(r,4).value)
				for monrfindex in range(0,len(monthday_rf)):
					eachmon_rf=eachmon_rf+int(monthday_rf[monrfindex])
				monthday_rf=[]
				ws.write(stationindex,monindex+2,eachmon_rf)
				eachmon_rf=0
		savepth='D://rainfall_deal'
		strsavepth=savepth+'//'+strfilename
		wb.save(strsavepth)
		
if __name__ == '__main__':
		path='D://rainfall_deal//rainfall_excel'
		lista=os.listdir(path)
		monthname=['2000','2001','2002','2003','2004','2005','2006','2007','2008','2009','2010','2011']
		for k in range(0,len(lista)):
			strPth=path+'//'+lista[k]
			t = OperExcel()
			strfilename='stat_'+monthname[k]+'rf.xls'
			t.rExcel(strPth,strfilename,'test')

   7、在dos下面,執行程式碼。坐等收穫想要的資料。

   8、結果如下:

總結:python是一門很有用的語言,能幫助做不少的事情。很容易學。我的這個程式還有不少問題,還望高手指教!