《大數(shù)據(jù)技術(shù)在財(cái)務(wù)中的應(yīng)用》 課件 項(xiàng)目6、7 模塊在財(cái)務(wù)中的應(yīng)用、Python在財(cái)務(wù)中的應(yīng)用案例_第1頁
《大數(shù)據(jù)技術(shù)在財(cái)務(wù)中的應(yīng)用》 課件 項(xiàng)目6、7 模塊在財(cái)務(wù)中的應(yīng)用、Python在財(cái)務(wù)中的應(yīng)用案例_第2頁
《大數(shù)據(jù)技術(shù)在財(cái)務(wù)中的應(yīng)用》 課件 項(xiàng)目6、7 模塊在財(cái)務(wù)中的應(yīng)用、Python在財(cái)務(wù)中的應(yīng)用案例_第3頁
《大數(shù)據(jù)技術(shù)在財(cái)務(wù)中的應(yīng)用》 課件 項(xiàng)目6、7 模塊在財(cái)務(wù)中的應(yīng)用、Python在財(cái)務(wù)中的應(yīng)用案例_第4頁
《大數(shù)據(jù)技術(shù)在財(cái)務(wù)中的應(yīng)用》 課件 項(xiàng)目6、7 模塊在財(cái)務(wù)中的應(yīng)用、Python在財(cái)務(wù)中的應(yīng)用案例_第5頁
已閱讀5頁,還剩293頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

項(xiàng)目六模塊在財(cái)務(wù)中的應(yīng)用模塊Python語言最大的優(yōu)勢,是免費(fèi)開源,除了自帶的一些模塊,還有數(shù)量龐大且功能強(qiáng)大的第三方模塊可以使用。用好Python自帶的模塊和第三方模塊是學(xué)習(xí)Python的基本目標(biāo)。函數(shù):是具有獨(dú)立名稱、獨(dú)特功能的一段代碼。模塊:是分門別類、存放若干函數(shù)的文件。01模塊的基本用法02內(nèi)置模塊03第三方模塊04數(shù)據(jù)處理目錄CONTENT01.模塊的基本用法(1)模塊導(dǎo)入的基本方法要使用某個模塊中的函數(shù),需要先導(dǎo)入模塊。比喻一下:若將函數(shù)比作是“工具”,那么,模塊就是“工具箱”,要使用工具,要先打開相應(yīng)的工具箱。在Python中,可以使用import關(guān)鍵字來導(dǎo)入模塊。例如:想使用數(shù)學(xué)模塊math模塊中的函數(shù),首先要使用importmath導(dǎo)入。(1)模塊導(dǎo)入的基本方法Python提供了以下3種導(dǎo)入模塊的方式:(1)import模塊名(2)import模塊名as模塊別名(3)from模塊名import函數(shù)名/方法名提醒一下:不管執(zhí)行了多少次import,一個模塊只會被導(dǎo)入一次。(2)模塊導(dǎo)入應(yīng)用舉例不同的導(dǎo)入方式對于模塊內(nèi)的方法和屬性的調(diào)用是有區(qū)別的。使用“(1)import模塊名”導(dǎo)入模塊時,調(diào)用的格式為“模塊名.屬性/方法”。例如:importmath

#導(dǎo)入數(shù)學(xué)模塊mathprint(math.fabs(-5)) #調(diào)用數(shù)學(xué)模塊math的fabs()方法print(math.pow(2,3)) #調(diào)用數(shù)學(xué)模塊math的pow()方法。(2)模塊導(dǎo)入應(yīng)用舉例使用“(2)import模塊名as模塊別名”方式導(dǎo)入時,使用“模塊別名.屬性/方法”調(diào)用。例如:importmathassalary #導(dǎo)入數(shù)學(xué)模塊math并起別名salaryprint(salary.fabs(-5)) #調(diào)用數(shù)學(xué)模塊math的fabs()方法importnumpyasnp #約定俗成的別名importpandasaspd #約定俗成的別名(2)模塊導(dǎo)入應(yīng)用舉例使用“(3)from模塊名import函數(shù)名/方法名”方式導(dǎo)入時,可以有針對性地導(dǎo)入某個函數(shù)或者方法,當(dāng)然,如果用“from模塊名import*”導(dǎo)入,則導(dǎo)入模塊的全部。例如:frommathimport* #導(dǎo)入數(shù)學(xué)模塊math的全部屬性和方法print(pow(5,3)) #直接調(diào)用數(shù)學(xué)模塊math的pow()方法此時導(dǎo)入數(shù)學(xué)模塊math的全部屬性和方法,因此math模塊內(nèi)的全部屬性和方法都可以直接調(diào)用,而不能也不需要加前綴“math.”。(2)模塊導(dǎo)入應(yīng)用舉例如果局部導(dǎo)入模塊中的指定函數(shù)或方法,則導(dǎo)入速度快、內(nèi)存開銷小,但是也存在一定的局限性,那些沒有導(dǎo)入的函數(shù)將不能使用。例如:frommathimportpow #局部導(dǎo)入數(shù)學(xué)模塊math的pow()方法print(pow(5,3)) #直接調(diào)用pow(),前面不能添加“模塊名.”此時,如果使用未經(jīng)導(dǎo)入的絕對值函數(shù)fabs(),將會出現(xiàn)錯誤。對于上述3種導(dǎo)入方式,編程時可根據(jù)個人的需要和習(xí)慣進(jìn)行選擇。02.常用內(nèi)置模塊內(nèi)置模塊那些在安裝Python時就默認(rèn)已經(jīng)安裝好的模塊稱為標(biāo)準(zhǔn)庫,也稱為內(nèi)置模塊,如math模塊。有人把它們稱為“Python自帶的電池”,意思是Python擁有無限能量。熟悉標(biāo)準(zhǔn)庫的使用是應(yīng)用好Python所必需的。我們僅要求大家熟悉幾種常用的內(nèi)置模塊:math模塊、random模塊、time模塊和datetime模塊。實(shí)際工作中,可以根據(jù)需要繼續(xù)拓展學(xué)習(xí)。(1)math模塊math模塊中有大量常用的數(shù)學(xué)計(jì)算函數(shù),如三角函數(shù)(sin()、cos()、tan())、反三角函數(shù)(asin()、acos()、atan())等,還有數(shù)學(xué)常量,如pi(圓周率)、e(自然數(shù))等。在財(cái)務(wù)工作中,我們可能會經(jīng)常用到這些簡單又實(shí)用的函數(shù)。例如:使用絕對值函數(shù)fabs()來評價投資項(xiàng)目收益偏離目標(biāo)的程度、使用冪運(yùn)算函數(shù)pow()計(jì)算現(xiàn)值終值系數(shù)、使用平方根函數(shù)sqrt()計(jì)算企業(yè)最佳現(xiàn)金持有量和經(jīng)濟(jì)訂貨批量。(1)math模塊舉例例:若存貨全年需要量為D,每批訂貨成本為U,每批訂貨量為Q,每件存貨的年儲存成本為C,那么經(jīng)濟(jì)訂貨批量

。已知某零件年需用量為3600件,每批訂貨成本為100元,單位儲存成本為2元。使用math模塊中sqrt()函數(shù)計(jì)算經(jīng)濟(jì)訂貨批量:importmath#導(dǎo)入math模塊 D=3600U=100C=2print("經(jīng)濟(jì)訂貨批量為",math.sqrt(2*U*D/C),"件。")(2)random模塊random模塊主要用來生成隨機(jī)數(shù),隨機(jī)數(shù)是有范圍的。函數(shù)名功能random()隨機(jī)生成一個[0,1]之間的數(shù)(含兩端,下同)randint(a,b)隨機(jī)生成一個[x,y]之間的整數(shù)。x,y都是整數(shù)uniform(x,y)隨機(jī)生成一個[x,y]之間的數(shù)。x,y可以是小數(shù)randrange(x,y,z)在range(x,y,z)中隨機(jī)取一個數(shù)choice(x)從序列x中隨機(jī)取一個元素。x可以是列表、元組、字符串random模塊的部分函數(shù)(2)random模塊舉例importrandomprint(random.random())print(random.randint(1,10))print(random.uniform(1.2,5.6))print(random.randrange(2,30,5))

#在序列(2,7,12,17,22,27)中取隨機(jī)數(shù)print(random.choice("有借必有貸,借貸必相等"))print(random.choice(["資產(chǎn)","負(fù)債","所有者權(quán)益","收入","費(fèi)用","利潤"]))(3)time模塊time模塊是和時間相關(guān)的庫,我們在計(jì)算應(yīng)計(jì)利息、固定資產(chǎn)折舊、員工工齡工資時都要用時間計(jì)算,下面是一些常用的時間函數(shù):(1)time()函數(shù)。為時間戳函數(shù),表示從1970年1月1日0時0分0秒起,至當(dāng)前時間的總秒數(shù)。(2)localtime()函數(shù)。用于獲取本地時間。結(jié)果是一個時間元組,各項(xiàng)含義,詳見教材表6-2-2。(3)time模塊舉例內(nèi)置模塊time常用函數(shù)示例importtimeprint(time.time())print(time.localtime())運(yùn)行結(jié)果:1688348609.6964917time.struct_time(tm_year=2023,tm_mon=7,tm_mday=3,tm_hour=9,tm_min=43,tm_sec=29,tm_wday=0,tm_yday=184,tm_isdst=0)【代碼說明】第1個結(jié)果是時間戳,是運(yùn)行該語句時的時間與起始時間之間的總秒數(shù)。

第2個結(jié)果是一個時間元組,是當(dāng)前制作本課件時運(yùn)行該語句的時間數(shù)據(jù)。(4)datetime模塊雖然time模塊可以實(shí)現(xiàn)有關(guān)時間方面的所有功能,但是使用起來略顯繁瑣,所以又出現(xiàn)了datetime模塊。在Python中datetime模塊也用來處理時間和日期。1.datetime.date:表示日期的類。常用屬性有year,month,day。2.datetime.datetime:表示日期和時間的類。3.datetime.time:表示時間的類。常用屬性有hour,minute,decond。4.datetime.timedelta:表示時間間隔,即兩個時間點(diǎn)之間的長度。(4)datetime模塊舉例importdatetimet=datetime.date #注意此處t的取值print(t.today()) #調(diào)用當(dāng)前時間today()函數(shù)print(t.today().year)print(t.today().month)print(t.today().day)注意:每個人運(yùn)行代碼的時間點(diǎn)不相同,所以產(chǎn)生的結(jié)果也不相同。課后小結(jié)本節(jié)我們學(xué)習(xí)了Python自帶的內(nèi)置模塊的使用方法,其中重點(diǎn)介紹了math和random模塊的使用。其實(shí),Python內(nèi)置模塊還要很多很多,使用方法卻是大同小異,主要不同體現(xiàn)在所實(shí)現(xiàn)的功能上。有興趣的讀者可以查閱資料,繼續(xù)深入進(jìn)行研究。03.第三方模塊第三方模塊Python目前已經(jīng)成為數(shù)據(jù)分析和數(shù)據(jù)挖掘軟件的中流砥柱,目前在財(cái)務(wù)數(shù)據(jù)的處理與分析中也扮演著越來越重要的角色。Python自身的列表和字典等數(shù)據(jù)類型特別適合數(shù)據(jù)分析處理。更重要的是,Python擁有一個非常活躍的科學(xué)計(jì)算社區(qū),有不斷改良的第三方數(shù)據(jù)分析擴(kuò)展庫。安裝第三方模塊使用第三方模塊之前都需要先安裝。Python提供了安裝模塊的工具,就是pip或pip3。找到Python的安裝文件夾,在命令行窗口輸入:pipinstall模塊名(或pip3install模塊名)就可以安裝,例如安裝numpy模塊,命令如圖所示:pandas是財(cái)務(wù)人員使用頻率最高、最重要的模塊。既能處理Excel難以解決的大批量數(shù)據(jù)問題,又能對日常財(cái)務(wù)工作中儲存在Excel中的少量數(shù)據(jù)進(jìn)行更快速度的處理。2)pandas模塊matplotlib是一個Python繪圖庫,已經(jīng)成為公認(rèn)的數(shù)據(jù)可視化工具。可以很輕松地畫一些或簡單或復(fù)雜的圖形,生成折線圖、直方圖、條形圖、散點(diǎn)圖等,使用方便簡單。3)matplotlib模塊pyecharts可以展示動態(tài)圖,在線報(bào)告等,比較美觀且展示數(shù)據(jù)方便,鼠標(biāo)懸停在圖上,即可顯示數(shù)值、標(biāo)簽等,甚至單擊標(biāo)簽實(shí)現(xiàn)部分圖形的關(guān)閉與打開,效果非??犰拧?)pyecharts模塊numpy是一個用Python實(shí)現(xiàn)的科學(xué)計(jì)算包,專為進(jìn)行嚴(yán)格的數(shù)值處理而設(shè)計(jì)的。多為很多大型金融公司和核心的科學(xué)計(jì)算組織使用,具有運(yùn)算速度快、效率高、節(jié)省空間等特點(diǎn)。1)numpy模塊我們將學(xué)習(xí)以下四個模塊(1)numpy模塊numpy是一個用Python實(shí)現(xiàn)的科學(xué)計(jì)算包,專為進(jìn)行嚴(yán)格的數(shù)值處理而設(shè)計(jì)的。尤其是對大型多維數(shù)組和矩陣,numpy有一個大型的高級數(shù)學(xué)函數(shù)庫來操作這些數(shù)組。numpy提供了許多高級的數(shù)值編程工具,如矩陣數(shù)據(jù)類型、矢量處理,以及精密運(yùn)算等。numpy多為很多大型金融公司和核心的科學(xué)計(jì)算組織使用,具有運(yùn)算速度快、效率高、節(jié)省空間等特點(diǎn)。(1.1)創(chuàng)建numpy數(shù)組numpy中最重要的對象就是ndarray多維數(shù)組,它是一組相同類型元素的集合,元素可用從0開始的索引來訪問。多維數(shù)組ndarray中的元素在內(nèi)存中連續(xù)存放并占據(jù)同樣大小的存儲空間。numpy的數(shù)組通常處理數(shù)值型數(shù)據(jù)。要使用numpy模塊前需先導(dǎo)入模塊,其約定俗成的語法格式如下:importnumpyasnp

#np是numpy公認(rèn)的別名,最好不要標(biāo)新立異(1.1)創(chuàng)建numpy數(shù)組numpy模塊中創(chuàng)建數(shù)組的常用函數(shù)如下表所示:函數(shù)功能array(x)根據(jù)列表或元組x創(chuàng)建數(shù)組arange(x,y,i)創(chuàng)建一維數(shù)組,元素等價于序列range(x,y,i)random.randint(…)創(chuàng)建一個元素為隨機(jī)整數(shù)的數(shù)組numpy模塊的常用函數(shù)【例】創(chuàng)建numpy數(shù)組的程序示例importnumpyasnp #導(dǎo)入numpy模塊print(np.array([1,2,3,4])) #使用已知列表創(chuàng)建一維數(shù)組print(np.arange(1,10,3)) #以自動生成的序列創(chuàng)建一維數(shù)組print(np.random.randint(10,20,5)) #創(chuàng)建一個一維數(shù)組,其取值區(qū)間是[10,20]的隨機(jī)整數(shù),數(shù)組元素為5個print(np.random.randint(10,20,[2,3]))#創(chuàng)建一個2行3列的二維數(shù)組,其取值區(qū)間是[10,20],數(shù)組元素為6個(1.1)創(chuàng)建numpy數(shù)組numpy數(shù)組常用屬性和函數(shù)屬性或函數(shù)含義或功能dtype數(shù)組元素的類型size數(shù)組元素的個數(shù)tolist()數(shù)組轉(zhuǎn)換為列表listreshape()改變數(shù)組的形狀(1.2)numpy數(shù)組常用屬性和函數(shù)常用屬性和函數(shù)用法舉例:importnumpyasnp

#導(dǎo)入numpy模塊a=np.arange(0,15,2) #以自動生成的序列創(chuàng)建一維數(shù)組ab=a.tolist() #將數(shù)組a轉(zhuǎn)換為列表bc=a.reshape(2,4) #使用數(shù)組a的元素,將其形狀改為2行4列,存入二維數(shù)組c;a不變print(a)print(b)print(c)print(c.dtype)#測試數(shù)組c的元素類型print(c.size) #測試數(shù)組c的元素個數(shù)(1.2)numpy數(shù)組常用屬性和函數(shù)【代碼說明】(1)注意a和b的類型不同,其輸出效果不同。(2)a是數(shù)組,元素之間顯示為空格;b是列表,元素之間是逗號。(1.3)numpy數(shù)組的運(yùn)算numpy數(shù)組的優(yōu)勢是可以很方便地對數(shù)組元素進(jìn)行數(shù)學(xué)運(yùn)算。數(shù)組參與的數(shù)學(xué)運(yùn)算分三種:1.兩個數(shù)組之間進(jìn)行加減乘除運(yùn)算,要求參與運(yùn)算的兩個數(shù)組具有相同的形狀shape,即相同的維數(shù)與元素個數(shù)。其運(yùn)算是對應(yīng)位置元素的計(jì)算;2.數(shù)組與數(shù)字之間進(jìn)行的四則運(yùn)算,每個元素都做相同的運(yùn)算;3.對數(shù)組進(jìn)行統(tǒng)計(jì)計(jì)算:求和、求平均值、求最小值、求最大值。(1.3)numpy數(shù)組的運(yùn)算及用法示例1importnumpyasnpa=np.array((1,2,3,4))

#[1234]b=a+1

#[2345]c=a*10

#[10203040]print(a)print(b)print(c)print(a+b)

#數(shù)組a和b對應(yīng)位置元素相加print(a*b) #數(shù)組a和b對應(yīng)位置元素相乘print(np.sqrt(c)) #對數(shù)組c每個元素求平方根運(yùn)行結(jié)果:[1234][2345][10203040][3579][261220][3.162277664.472135955.477225586.32455532] (1.3)numpy數(shù)組的運(yùn)算及用法示例2【知識拓展】在財(cái)務(wù)數(shù)據(jù)處理與分析中,我們需要經(jīng)常對不同期間或項(xiàng)目的一系列數(shù)字進(jìn)行批量處理,例如計(jì)算員工工資時對各項(xiàng)收入和扣除項(xiàng)進(jìn)行匯總(加和減),計(jì)算銷售額時對各批次銷量乘以單價(乘),計(jì)算本期各項(xiàng)數(shù)據(jù)相比上期同項(xiàng)數(shù)據(jù)的增長率(除)。例如,企業(yè)本期共銷售了5批商品,銷量分別為5000、8000、1500、4000、6500件,對應(yīng)單價為1.5、1.3、2.0、1.6、1.4元每件,計(jì)算每批次的銷售額。代碼如下:importnumpyasnpa=np.array((5000,8000,1500,4000,6500))b=np.array((1.5,1.3,2.0,1.6,1.4))print(a*b)——————————運(yùn)行結(jié)果:[7500.10400.3000.6400.9100.](1.3)numpy數(shù)組的運(yùn)算及用法示例3【例】numpy數(shù)組統(tǒng)計(jì)函數(shù)及用法示例importnumpyasnpa=np.arange(1,9,1).reshape(2,4)print(a)print("以下輸出所有元素的統(tǒng)計(jì)結(jié)果:")print(a.min())#求所有元素的最小值print(a.max())#求所有元素的最大值print(a.sum())#求所有元素的和print(a.mean())#求所有元素的平均值運(yùn)行結(jié)果:[[1234][5678]]以下輸出所有元素的統(tǒng)計(jì)結(jié)果:18364.5(2)pandas模塊pandas是數(shù)據(jù)分析最常用的模塊,可以說是財(cái)務(wù)人員在使用Python進(jìn)行工作時使用頻率最高、最重要的模塊。Python中的所有數(shù)據(jù)類型在pandas中依然適用,pandas主要有一維Series、二維的表格DataFrame類型。一維Series與numpy中的一維數(shù)組array類似,所不同的是,數(shù)組array通常處理的數(shù)據(jù)是數(shù)值型,而Series可以存放字符型、數(shù)字、boolean值等數(shù)據(jù)類型;二維的表格DataFrame類型可以理解為Series的容器。這些數(shù)據(jù)類型使pandas操作數(shù)據(jù)更加方便和高效,其中DataFrame類型最為常用。(2)pandas模塊Series相當(dāng)于Excel中任意一列數(shù)據(jù),DataFrame相當(dāng)于一張完整的Excel表格,是一個帶行、列標(biāo)簽的二維表格。pandas的核心功能就是在二維表格DataFrame上做各種操作。如果安裝了OpenPyXL、Xlrd、Xlwt模塊,pandas還能用于讀寫Excel文檔。因此,pandas既能處理Excel難以解決的大批量數(shù)據(jù)問題,又能對日常財(cái)務(wù)工作中儲存在Excel中的少量數(shù)據(jù)進(jìn)行更快速度的處理。執(zhí)行pipinstallpandas可以安裝pandas。DataFrame類型最為常用。(2.1)一維Series類型Series是pandas中很重要的類型。Series是每個元素都有一個標(biāo)簽的一維表格,相當(dāng)于Excel中任意一列數(shù)據(jù),從使用形式上看,兼具字典和列表的特點(diǎn)。Series的定義規(guī)則:pd.Series(data,index) #data為數(shù)據(jù)列,index為索引列數(shù)據(jù)列:可以由列表、字典等作為參數(shù)來創(chuàng)建。索引列:可用列表自定義,必須與數(shù)據(jù)列的個數(shù)匹配。缺省默認(rèn)從0開始。(2.1)一維Series類型舉例【例】Series用法示例——創(chuàng)建Series,用來統(tǒng)計(jì)資產(chǎn)負(fù)債表中貨幣資金項(xiàng)目各科目金額:importpandasaspd

#導(dǎo)入pandas模塊data=[5260,16000,1480]

#用列表提供數(shù)據(jù)index=['庫存現(xiàn)金','銀行存款','其他貨幣資金']#用列表提供索引#以上為數(shù)據(jù)準(zhǔn)備的步驟,分別為創(chuàng)建Series的元素值和標(biāo)簽準(zhǔn)備數(shù)據(jù)。#以下為創(chuàng)建Series的幾種方法:#1.方法一,用列表創(chuàng)建Series,自定義索引。zj=pd.Series(data,index) #創(chuàng)建了一個Series一維表格zjprint(zj) #輸出Series表格zj【代碼說明】(1)data參數(shù)指明Series包含的元素,zj的元素為5260160001480(2)index參數(shù)指明每個元素的標(biāo)簽(3)可以認(rèn)為zj是個記錄了三個貨幣資金項(xiàng)目的一維表格(2.1)一維Series類型舉例#2.方法二,用列表創(chuàng)建Series,不定義索引。zj2=pd.Series(data) #創(chuàng)建了一個Series一維表格zj2print(zj2)

#輸出Series表格zj2運(yùn)行結(jié)果:0526011600021480【代碼說明】:如果省略標(biāo)簽index參數(shù),則三個元素的標(biāo)簽就采用默認(rèn)值0、1、2。#3.方法三,用字典創(chuàng)建Series,字典作為數(shù)據(jù)列。kemu={1001:'庫存現(xiàn)金',1002:'銀行存款',1012:'其他貨幣資金'}zj3=pd.Series(kemu)print(zj3)運(yùn)行結(jié)果:1001庫存現(xiàn)金1002銀行存款1012其他貨幣資金【代碼說明】(1)此時,字典的key會作為索引列,因此不需要再寫index索引列。(2)結(jié)果注釋:字符類型的列都是object類型。DataFrame是pandas模塊中最重要的數(shù)據(jù)類型。DataFrame相當(dāng)于一張完整的Excel表格,是一個帶行、列標(biāo)簽的二維表格。pandas的核心功能就是在二維表格DataFrame上做各種操作。(2.2)二維DataFrame類型DataFrame的定義規(guī)則:pd.DataFrame(data=[列表],columns=[列表],index=[列表]) #data為數(shù)據(jù)列,columns=是指定列索引[列表],index=是指定行索引[列表](1)data數(shù)據(jù)部分:由多行數(shù)據(jù)組成的列表。(2)columns列索引列表,缺省默認(rèn)從0開始。(3)index行索引列表,缺省默認(rèn)從0開始。(2.2.1)DataFrame的定義【例】DataFrame用法示例——創(chuàng)建DataFrame用來儲存職工薪酬信息:importpandasaspd #導(dǎo)入pandas模塊#定義數(shù)據(jù)部分,此處定義了3行數(shù)據(jù)salary=[[199905,'張鵬','女',5600,3200,2800], [200101,'秦曉梅','女',5300,3000,2600], [201801,'任東海','男',4800,2800,2400]]#方法1:不自定義行索引和列索引,僅指定數(shù)據(jù)部分。df=pd.DataFrame(salary)print(df)運(yùn)行結(jié)果:(2.2.1)DataFrame的定義#方法2:自定義行索引或者列索引。lie=['工號','姓名','性別','基本工資','績效工資','加班工資']#定義列索引,即每列數(shù)據(jù)的列標(biāo)題hang=[1,2,3]#定義行索引,即每行數(shù)據(jù)最左側(cè)的序號df=pd.DataFrame(data=salary,columns=lie,index=hang)#定義三個參數(shù)齊全的DataFrame二維表print(df)#輸出二維表df運(yùn)行結(jié)果:【知識拓展】創(chuàng)建二維DataFrame表時,pd.DataFrame()的三個參數(shù)部分data,columns和index,其中數(shù)據(jù)部分data必須要有,行/列索引可有可無。行/列索引若是有,則采用指定的索引;若是無,則采用默認(rèn)值。這三部分的書寫順序沒有嚴(yán)格的要求,只要寫明data=,columns=,index=這樣的關(guān)鍵字即可。但是,行索引和列索引必須與數(shù)據(jù)行數(shù)和列數(shù)的個數(shù)匹配,否則將出錯。(2.2.1)DataFrame的定義(1)獲取單列:df['列名'] #例如df['姓名'](2)獲取多列:df[['列名1'],['列名2']] #注意括號是兩層(3)獲取多行:df[m:n]【說明】m和n采用默認(rèn)行索引,與自定義指定的index無關(guān);采用前閉后開的規(guī)則,例如df[0:2]選取0、1行,即第1、2行。(4)按照條件篩選行:df[(df['列1']==條件)] #條件前面書寫比較運(yùn)算符,如>=,<=等df[(df['列1']==條件1)&(df['列2']>=條件2)]]【注意】多列條件之間可以使用&(并且)、|(或者)等邏輯運(yùn)算符。獲取前n行:df.head(n) #不寫n時默認(rèn)前5行;n=3時,獲取前3行獲取后n行:df.tail(n) #不寫n時默認(rèn)后5行(2.2.2)DataFrame數(shù)據(jù)的直接讀取【例】DataFrame用法示例——輸出DataFrame數(shù)據(jù)獲取單列和多列進(jìn)行輸出:print(df['姓名']) #輸出'姓名'列的值print(df[['姓名','性別']]) #輸出'姓名'、'性別'兩列的值,注意寫法運(yùn)行結(jié)果:獲取前幾行/后幾行進(jìn)行輸出:print(df.head(2)) #輸出前2行print(df.tail(2)) #輸出后2行運(yùn)行結(jié)果:(2.2.2)DataFrame數(shù)據(jù)的直接讀取以下代碼對索引進(jìn)行了條件篩選,輸出符合條件的行:print(df[(df['性別']=='女')])print(df[(df['性別']=='女')&(df['基本工資']>=5500)])運(yùn)行結(jié)果:以下代碼按照默認(rèn)行索引讀取多行,行號采用默認(rèn)索引,且前閉后開:print(df[0:2]) #選取0、1行print(df[1:3]) #選取1、2行運(yùn)行結(jié)果:(2.2.2)DataFrame數(shù)據(jù)的直接讀取以下代碼分解輸出了DataFrame的數(shù)據(jù)部分、列索引和行索引:print(df.values)print(df.columns)print(df.index)這三行代碼的運(yùn)行結(jié)果:(2.2.2)DataFrame數(shù)據(jù)的直接讀取可以使用loc索引器讀取數(shù)據(jù),loc索引器內(nèi)只能使用自定義索引,如果沒有自定義索引,則按照原始索引。根據(jù)index和column進(jìn)行選取。常見形式:(1)讀取單行:df.loc[行號]#例如df.loc[2],讀取自定義行號為2的行(2)讀取多行多列:df.loc[[行號1,行號2,…],['列1','列2',…]](3)按列條件選取行列:df.loc[(df.['列']>條件),['列1','列2',…]](4)讀取連續(xù)行,連續(xù)列:df.loc[行號1:行號2,'列1':'列2'](2.2.3)DataFrame數(shù)據(jù)的間接讀取【例】DataFrame用法示例——間接讀取DataFrame數(shù)據(jù)importnumpyasnp #導(dǎo)入numpy模塊importpandasaspd #導(dǎo)入pandas模塊salary=[[199905,'張鵬','女',5600,3200,2800],[200101,'秦曉梅','女',5300,3000,2600],[201801,'任東海','男',4800,2800,2400],[201901,'尚大海','男',4600,2200,2800],[202101,'李思燃','女',4300,3000,3600]]lie=['工號','姓名','性別','基本工資','績效工資','加班工資']hang=[1,2,3,4,5] #自定義行索引,其行號允許重復(fù)df=pd.DataFrame(data=salary,columns=lie,index=hang)print(df)這段代碼的運(yùn)行結(jié)果:(2.2.3)DataFrame數(shù)據(jù)的間接讀取以下代碼輸出指定行號的行,即自定義索引為2的行,若行號重復(fù),則輸出所有行索引為2的行,即輸出多行:print(df.loc[2])以上代碼的運(yùn)行結(jié)果:以下代碼輸出自定義索引為1,2,3的行,注意索引全閉合print(df.loc[1:3])運(yùn)行結(jié)果:以下代碼輸出指定索引行和列的數(shù)據(jù):print(df.loc[[1,3,5],['姓名','加班工資','績效工資']])print(df.loc[[2,3],['姓名','工號','加班工資']])以上代碼的運(yùn)行結(jié)果:(2.2.3)DataFrame數(shù)據(jù)的間接讀取以下代碼輸出按列條件選取‘性別’為‘男’的3列信息:print(df.loc[(df['性別']=='男'),['姓名','性別','加班工資']]) 以下代碼輸出位置連續(xù)的多行多列數(shù)據(jù),注意自定義索引全閉合,即輸出2、3、4行,'姓名'、'性別'、'基本工資'、'績效工資'列的數(shù)據(jù):print(df.loc[2:4,'姓名':'績效工資'])運(yùn)行結(jié)果:【知識小結(jié)】DataFrame數(shù)據(jù)的直接讀取df[m:n]時,按照默認(rèn)索引,且索引值前閉后開,即不包含n;間接讀取的df.loc[m:n]優(yōu)先按照自定義索引,且索引值是全閉合的,即包含n,要注意區(qū)分。另外,在按照條件篩選數(shù)據(jù)時,條件部分要用小括號括起來。(2.2.3)DataFrame數(shù)據(jù)的間接讀取我們通常使用讀取到的DataFrame數(shù)據(jù)的進(jìn)行簡單計(jì)算。假設(shè)需要根據(jù)下面已知的DataFrame數(shù)據(jù)和計(jì)算公式,計(jì)算得到'應(yīng)發(fā)工資'、'扣費(fèi)'和'實(shí)發(fā)工資',并將結(jié)果添加到原始的數(shù)據(jù)上。計(jì)算公式如下:應(yīng)發(fā)工資=基本工資+績效工資+加班工資扣費(fèi)=應(yīng)發(fā)工資*0.1實(shí)發(fā)工資=應(yīng)發(fā)工資-扣費(fèi)【例】DataFrame用法示例——DataFrame數(shù)據(jù)的計(jì)算importpandasaspd #導(dǎo)入pandas模塊salary=[[199905,'張鵬','女',5600,3200,2800],[200101,'秦曉梅','女',5300,3000,2600],[201801,'任東海','男',4800,2800,2400],[201901,'尚大海','男',4600,2200,2800],[202101,'李思燃','女',4300,3000,3600]]lie=['工號','姓名','性別','基本工資','績效工資','加班工資']hang=[1,2,3,4,5] #自定義行索引,行號允許重復(fù)df=pd.DataFrame(data=salary,columns=lie,index=hang)print(df)(2.2.4)DataFrame數(shù)據(jù)的計(jì)算以下代碼計(jì)算出每人的'應(yīng)發(fā)工資',并將結(jié)果作為新的一列添加到原始數(shù)據(jù)表df上:df['應(yīng)發(fā)工資']=df['基本工資']+df['績效工資']+df['加班工資']print(df)輸出添加了'應(yīng)發(fā)工資'列的df數(shù)據(jù)表df['扣費(fèi)']=df['應(yīng)發(fā)工資']*0.1df['實(shí)發(fā)工資']=df['應(yīng)發(fā)工資']-df['扣費(fèi)']#以上兩行代碼計(jì)算出每人的'扣費(fèi)'和'實(shí)發(fā)工資',順序添加到原始數(shù)據(jù)dfprint(df)輸出最終結(jié)果:(2.2.4)DataFrame數(shù)據(jù)的計(jì)算(1)添加一行:df.loc[新行號]=數(shù)據(jù)列表(2)添加一列:df[‘新列名’]=數(shù)據(jù)列表(3)插入一列:df.insert(i,'新列名',數(shù)據(jù)列表)#新位置i是一個默認(rèn)的列索引,例如0,是作為第1列插入(4)刪除一列:df.drop('列名',axis=1,inplace=True)(5)刪除一行:df.drop(行號,axis=0,inplace=True)#優(yōu)先使用自定義行號,若未自定義,則采用默認(rèn)行號(6)刪除多列:df.drop(['列1','列2',…],axis=1,inplace=True)(7)刪除多行:df.drop([行號1,行號2,…],axis=0,inplace=True)【說明】(1)做刪除操作時,drop函數(shù)的參數(shù)axis表明了刪除的方向,決定刪除行還是刪除列,axis=1是刪除列;axis=0是刪除行。(2)參數(shù)inplace=True表示原地刪除,即df會發(fā)生變化,即不生成新的DataFrame表;若值為False,則df不會發(fā)生變化,drop函數(shù)返回一個新的DataFrame表,內(nèi)容是df經(jīng)過刪除操作后的表。(2.2.5)DataFrame數(shù)據(jù)的修改與增刪【例】DataFrame用法示例——DataFrame數(shù)據(jù)的修改與增刪importpandasaspd #導(dǎo)入pandas模塊salary=[[199905,'張鵬','女',5600,3200,2800],[200101,'秦曉梅','女',5300,3000,2600],[201801,'任東海','男',4800,2800,2400],[201901,'尚大海','男',4600,2200,2800],[202101,'李思燃','女',4300,3000,3600]]lie=['工號','姓名','性別','基本工資','績效工資','加班工資']hang=[1,2,3,4,5] #自定義行索引,其行號允許重復(fù)df=pd.DataFrame(data=salary,columns=lie,index=hang)print(df)定義并輸出DataFrame二維表df的原始數(shù)據(jù):(2.2.5)DataFrame數(shù)據(jù)的修改與增刪df.loc[6]=[201802,'李金萌','女',4600,3500,2200]#以上代碼添加了一行,行號為6df.insert(2,'工齡',[24,21,4,3,1,4])#以上代碼插入一列'工齡'并賦值,插入位置為列號2df['工齡工資']=df['工齡']*200#假設(shè)工齡工資=工齡*2,計(jì)算并添加一列'工齡工資'。print(df)

#輸出添加行列以后的df表,結(jié)果為:df.drop('加班工資',axis=1,inplace=True)#刪除df數(shù)據(jù)表中'加班工資'列的數(shù)據(jù),剩余7列不變df.drop(1,axis=0,inplace=True)#刪除df數(shù)據(jù)表中行號為1的行,剩余5行不變print(df)輸出刪除行列以后的df表:(2.2.5)DataFrame數(shù)據(jù)的修改與增刪df.drop([3,5],axis=0,inplace=True)#刪除df數(shù)據(jù)表中行號為3和5的兩行,僅剩余3行df.drop(['工號','基本工資'],axis=1,inplace=True)#刪除df數(shù)據(jù)表中'工號'和'基本工資'兩列的數(shù)據(jù),剩余5列print(df)輸出刪除行列以后的df表:(2.2.5)DataFrame數(shù)據(jù)的修改與增刪pandas可以將讀取到的表格型數(shù)據(jù)(文件不一定是表格)轉(zhuǎn)成DataFrame類型的數(shù)據(jù)結(jié)構(gòu),然后我們可以通過操作DataFrame進(jìn)行數(shù)據(jù)分析,數(shù)據(jù)預(yù)處理以及行和列的操作等。pandas支持讀取非常多類型的文件,我們以財(cái)務(wù)工作中常用的excel文件的讀取和寫入作為重點(diǎn)來講解。用pandas讀寫擴(kuò)展名是“.xlsx”的Excel文檔,需要使用命令pipinstallopenpyxl安裝OpenPyXL庫。讀寫擴(kuò)展名是“.lsx”的老Excel文檔,需要安裝Xlrd庫和Xlwt庫。安裝以后,使用第三方庫時還需要再使用import導(dǎo)入。(2.2.6)用pandas讀寫Excel文檔pandas的read_excel函數(shù)可以讀取Excel文件。函數(shù)及必要參數(shù)如下:pd.read_excel(iofilename,sheet_name=0,index_col=None,converters=None)除了第一個參數(shù)是文件名不可缺省,其他參數(shù)都有默認(rèn)值。大多數(shù)參數(shù)這里并未列出。sheet_name指明了要讀取的工作表名。參數(shù)sheet_name的取值有兩種寫法,一種寫為['表名'],表示要讀取此表中的數(shù)據(jù);一種寫為整數(shù)n,表示讀取文件中第n各工作表的數(shù)據(jù)(n從0開始算)。()用pandas讀Excel文檔若參數(shù)index_col=n表示取工作表中第n列(n從0開始算)的各個單元值作為行索引。如果不想這么做,則應(yīng)該讓index_col=None,這樣DataFrame的行索引就是默認(rèn)的0,1,2,…。converters的功能是強(qiáng)制規(guī)定指定列的數(shù)據(jù)類型,其格式為字典,例如指定金額為float,訂單編號為str,converters={‘金額’:float,‘訂單編號’:str}。()用pandas讀Excel文檔【例】讀取文件“工齡工資.xlsx”,輸出文件內(nèi)容。importpandasaspd #導(dǎo)入pandas模塊importopenpyxlasxl #導(dǎo)入Excel讀寫模塊openpyxldf=pd.read_excel('工齡工資.xlsx',sheet_name='工齡工資')#打開文件'工齡工資.xlsx',讀取'工齡工資'工作表內(nèi)的數(shù)據(jù)到dfprint(df)輸出存入DataFrame表df的Excel文件內(nèi)容,行索引為默認(rèn)值()用pandas讀Excel文檔程序繼續(xù),進(jìn)一步要求:再次讀取文件,把工號作為行索引,并將工齡工資轉(zhuǎn)換為浮點(diǎn)類型。df=pd.read_excel('工齡工資.xlsx',sheet_name='工齡工資',index_col='工號',converters={'工齡工資':float})print(df)輸出DataFrame表df的內(nèi)容:()用pandas讀Excel文檔pandas的to_excel函數(shù)可以將DataFrame格式的數(shù)據(jù)寫入Excel文件,若文件名已存在,則多次寫入同一個文件都是覆蓋原有文件,而不是往文件里面新增一個工作表。函數(shù)及必要參數(shù)如下:df.to_excel(filename,sheet_name=['表名'],index=None)第一個參數(shù)是新文件名,第二個參數(shù)sheet_name給要寫入的工作表命名。第三個參數(shù)index表示是否將行索引寫入新文件,默認(rèn)為index=True,即將行索引寫入新文件;若index=None,則不將行索引寫入新文件。()用pandas寫Excel文檔例】pandas寫入Excel文件用法示例:備份文件“工齡工資.xlsx”到備份文件中。importpandasaspd #導(dǎo)入pandas模塊importopenpyxlasxl #導(dǎo)入Excel讀寫模塊openpyxldf=pd.read_excel('工齡工資.xlsx',sheet_name='工齡工資')#打開文件'工齡工資.xlsx',讀取'工齡工資'工作表內(nèi)的數(shù)據(jù)到dfprint(df)輸出DataFrame表df的內(nèi)容,采用默認(rèn)行索引:()用pandas寫Excel文檔①使用to_excel函數(shù)的默認(rèn)參數(shù)寫入備份文件1:df.to_excel('工齡工資_備份1.xlsx',sheet_name='備份')②給to_excel函數(shù)添加一個參數(shù),再次寫入備份文件2:df.to_excel('工齡工資_備份2.xlsx',sheet_name='備份',index=None)#分別讀出兩個備份文件,輸出結(jié)果df1=pd.read_excel('工齡工資_備份1.xlsx',sheet_name='備份')df2=pd.read_excel('工齡工資_備份2.xlsx',sheet_name='備份')()用pandas寫Excel文檔print(df1)文件“工齡工資_備份1.xlsx”內(nèi)容:()用pandas寫Excel文檔print(df2)文件“工齡工資_備份2.xlsx”內(nèi)容:我們發(fā)現(xiàn),從同一文件中讀取的數(shù)據(jù)df,在寫入備份1文件時,默認(rèn)將自動行索引0~5寫入新文件中,即A列中存放了行索引;而添加了參數(shù)index=None的df.to_excel函數(shù),則禁止將行索引寫入備份2文件。注意,打開的Excel文件要及時關(guān)閉。在Excel文件打開狀態(tài)下讀寫該文件,會引起報(bào)錯。(2.2.7)DataFrame數(shù)據(jù)的連接與合并作為專業(yè)的財(cái)務(wù)數(shù)據(jù)分析人員,一定要學(xué)會數(shù)據(jù)的連接與合并這項(xiàng)必備的核心技能。在Python中,pandas.merge()方法可根據(jù)一個或多個鍵將兩張表的數(shù)據(jù)按行連接起來,pandas.concat()方法可以沿著一條軸將多個對象合并到一起。使用merge()方法進(jìn)行數(shù)據(jù)表連接時,可以根據(jù)一個或多個鍵將不同的DataFrame類型數(shù)據(jù)按行連接起來。為方便描述,以下對于參與合并的兩個DataFrame類型數(shù)據(jù)簡稱左表和右表。連接以后,很可能出現(xiàn)空值。空值的位置一般表示為NaN,若為日期型的空值則表示為NaT。()使用merge()方法進(jìn)行連接merge()方法的格式:merge(left,right,how='outer',on=…,left_on=…,right_on=…)merge()方法的常用參數(shù)參數(shù)解釋left與right參與合并的兩個DataFrame類型數(shù)據(jù),以下簡稱左表和右表how合并的方式,有inner(內(nèi)連接),left(左外連接),right(右外連接),outer(全外連接),默認(rèn)為inneron用于連接的列索引名稱,必須存在于左表和右表中,如果沒有指定且其它參數(shù)也未指定,則以兩表重疊列名做為連接鍵left_on左表中用作連接鍵的列名。當(dāng)兩表中沒有相同列名,但有含義相同的列時,就可以使用這個參數(shù)right_on與left_on配合使用,右表中用作連接鍵的列名merge連接的幾種方式:

()使用merge()方法進(jìn)行連接【例】使用merge()方法進(jìn)行數(shù)據(jù)連接的用法示例:importpandasaspd#導(dǎo)入pandas模塊#首先進(jìn)行數(shù)據(jù)準(zhǔn)備salary1=[['張鵬',24],['秦曉梅',21]]salary2=[['張鵬',5600],['尚大海',4600],['李金萌',4600]]#接著,使用代碼生成數(shù)據(jù)表df1和df2df1=pd.DataFrame(data=salary1,columns=['姓名','工齡'])df2=pd.DataFrame(data=salary2,columns=['姓名','基本工資'])#輸出原始數(shù)據(jù)表,左表和右表print(df1)print(df2)輸出結(jié)果為:()使用merge()方法進(jìn)行連接下面開始對數(shù)據(jù)表進(jìn)行merge()的各種連接1.內(nèi)連接df3=pd.merge(df1,df2) #默認(rèn)以兩表重疊的列名做為連接鍵,即姓名相同的行連接在一起,求交集;print(df3)這是默認(rèn)的內(nèi)連接,其輸出效果:相同效果,代碼也可以寫作:df3=pd.merge(df1,df2,how='inner',on='姓名')2.外連接,其中參數(shù)on='姓名'為默認(rèn)的,可以省略:df4=pd.merge(df1,df2,how='outer',on='姓名')print(df4)其輸出效果:【代碼說明】外連接生成的表df4包含了連接鍵所有不同取值的行和所有不同名的列遇到空值的位置,記作NaN。()使用merge()方法進(jìn)行連接當(dāng)左右兩表中的列名不相同時,需要用left_on和right_on進(jìn)行設(shè)置:df2=pd.DataFrame(data=salary2,columns=['職工姓名','基本工資'])df5=pd.merge(df1,df2,left_on='姓名',right_on='職工姓名')print(df5)df1中的'姓名'和df2中的'職工姓名'作為連接鍵,默認(rèn)內(nèi)連接df6=pd.merge(df1,df2,how='outer',left_on='姓名',right_on='職工姓名')print(df6)df1中的'姓名'和df22中的'職工姓名'作為連接鍵,使用了外連接【代碼說明】外連接生成的表df6包含了連接鍵所有不同取值的行和所有不同名的列;遇到空值的位置,記作NaN。()使用merge()方法進(jìn)行連接3.左連接,保留左邊df1中所有行,如果有列中沒有數(shù)據(jù)則以NaN填充df7=pd.merge(df1,df2,how='left')print(df7)4.右連接,保留左邊df2中所有行,如果有列中沒有數(shù)據(jù)則以NaN填充df8=pd.merge(df1,df2,how='right')print(df8)()使用merge()方法進(jìn)行連接如果想對數(shù)據(jù)表進(jìn)行簡單的“合并”,也可以稱為“拼接”或者“堆疊”,要使用concat()方法。concat()方法可以指定按某個軸進(jìn)行連接,可以指定連接的方式(outer,inner兩種)。連接以后,若出現(xiàn)空值,同樣表示為NaN,或者日期型空值NaT。concat()方法的基本格式:concat(objs,axis=0,join=‘outer’,…)()使用concat()方法進(jìn)行數(shù)據(jù)合并concat()方法的常用參數(shù)參數(shù)解釋objs參與連接的對象列表,唯一必須給定的參數(shù)。例如[df1,df2]axis指明連接的軸向,0是縱軸,1是橫軸;默認(rèn)是0,即上下合并join連接方式,“inner”、“outer”,默認(rèn)是“outer”;“inner”是交集,“outer”是并集ignore_index重建索引,默認(rèn)False不重建ignore_index=True,重建索引,重建后會把自定義索引刪除sort默認(rèn)為True,將合并的數(shù)據(jù)進(jìn)行排序,設(shè)置為False可提高性能()使用concat()方法進(jìn)行數(shù)據(jù)合并使用concat()方法進(jìn)行數(shù)據(jù)合并的用法示例:importpandasaspd#導(dǎo)入pandas模塊#首先進(jìn)行數(shù)據(jù)準(zhǔn)備salary1=[['張鵬',24],['秦曉梅',21]]salary2=[['張鵬',5600],['尚大海',4600],['李金萌',4600]]#接著,使用代碼生成數(shù)據(jù)表df1和df2df1=pd.DataFrame(data=salary1,columns=['姓名','工齡'])df2=pd.DataFrame(data=salary2,columns=['姓名','基本工資'])#輸出原始數(shù)據(jù)表,兩表均采用了默認(rèn)索引(0,1和0,1,2)print(df1)print(df2)()使用concat()方法進(jìn)行數(shù)據(jù)合并繼續(xù)上面的代碼,下面開始進(jìn)行concat數(shù)據(jù)表合并操作:①上下合并:直接上下拼接在一起,空值的位置表示為NaNshangxia=pd.concat([df1,df2],axis=0)print(shangxia)【代碼說明】axis=0是縱向合并,索引0,1和0,1,2也直接拼接;數(shù)據(jù)行則直接堆砌在一起,行數(shù)為行數(shù)之和,包含所有的列。上下合并后生成的表shangxia的輸出效果:()使用concat()方法進(jìn)行數(shù)據(jù)合并②左右合并:直接左右拼接在一起,空值的位置表示為NaNzuoyou=pd.concat([df1,df2],axis=1)print(zuoyou)#axis=1是橫向合并,按照行索引值相等拼接在一起#因?yàn)槭悄J(rèn)行索引,索引0和0,1和1的拼在一行#數(shù)據(jù)列直接堆砌在一起,包含所有的列#左右合并后生成的表zuoyou的輸出效果:()使用concat()方法進(jìn)行數(shù)據(jù)合并③內(nèi)連接:求交集在concat連接中,加上參數(shù)join='inner',得到的是兩表對象的交集,如果是join='outer',得到的是兩個表對象的并集,默認(rèn)是“outer”。對照以下示例進(jìn)行理解。shangxia2=pd.concat([df1,df2],axis=0,join='inner')print(shangxia2)加上join='inner'參數(shù)的上下合并,只留下同名的列,輸出效果:因默認(rèn)是外連接join='outer',所以只要沒有join='inner'的都是外連接。因此為避免重復(fù),外連接不再單獨(dú)舉例。其他參數(shù)可以查閱相關(guān)資料學(xué)習(xí)。()使用concat()方法進(jìn)行數(shù)據(jù)合并①merge只能橫向連接,concat可以實(shí)現(xiàn)橫向/縱向拼接②merge只能操作兩張表,concat可以操作多張表③merge操作的兩張表分開寫,concat操作的多張表寫在一個列表中④merge默認(rèn)是內(nèi)連接,concat默認(rèn)是外連接⑤merge的連接方式用how控制,how有l(wèi)eft/right/inner/outer;⑥concat的連接方式用axis和join控制,axis有0/1(0:列,上下合并;1:行,左右合并),join有inner/outer⑦merge合并的范圍廣泛,可以通過索引/列關(guān)聯(lián),concat合并的范圍小,只支持索引的合并⑧concat只是單純的進(jìn)行表合并,merge可以過濾后進(jìn)行連接(2.2.7)merge和concat的區(qū)別我們都熟悉辦公軟件中的電子表格,其中的分類匯總和數(shù)據(jù)透視表功能強(qiáng)大。分類匯總可以對數(shù)據(jù)進(jìn)行靜態(tài)的統(tǒng)計(jì)和分析,數(shù)據(jù)透視表則可以對數(shù)據(jù)動態(tài)排布并且多角度分類匯總。pandas的數(shù)據(jù)匯總主要有g(shù)roupby函數(shù)和pivot_table函數(shù)。groupy()主要實(shí)現(xiàn)按列分組統(tǒng)計(jì),就是電子表格的分類匯總功能;pivote_table()主要實(shí)現(xiàn)二維的分組統(tǒng)計(jì),就是電子表格的數(shù)據(jù)透視表功能。(2.2.8)DataFrame數(shù)據(jù)匯總(1)使用groupy()函數(shù)實(shí)現(xiàn)分組統(tǒng)計(jì)groupy()函數(shù)實(shí)現(xiàn)的分組統(tǒng)計(jì),就是電子表格的分類匯總功能,對數(shù)據(jù)進(jìn)行按列分組以及分組后的組內(nèi)運(yùn)算;需要指定分組的列、值和對值的計(jì)算方式(計(jì)數(shù)、合計(jì)、平均等)。只有數(shù)字類型的列數(shù)據(jù)才會計(jì)算統(tǒng)計(jì)。groupy()函數(shù)的語法格式:df.groupby([屬性列表]).計(jì)算方式屬性列表中列出了分組的列名稱,列名稱若為多個,要書寫為列表格式(即寫在[]里面,若只有一個列名稱,不需要寫[]),每個列名稱上要使用引號;(2.2.8)DataFrame數(shù)據(jù)匯總常用計(jì)算方式有求和sum(),平均值mean(),最大值max(),最小值min(),計(jì)數(shù)count()或者len()。使用groupy()進(jìn)行分組統(tǒng)計(jì)的用法示例:importpandasaspd#導(dǎo)入pandas模塊#構(gòu)建原始數(shù)據(jù)表dfinfo=[['小明','男',1,170],['曉梅','女',2,165],['東海','男',1,176],['大海','男',2,178],['金萌','女',1,170]]lie=['姓名','性別','班級','身高']df=pd.DataFrame(data=info,columns=lie)print(df)原始數(shù)據(jù)表df輸出結(jié)果為:(2.2.8)DataFrame數(shù)據(jù)匯總①對所有的列計(jì)數(shù)匯總:print(df.groupby('班級').count())#按照班級列對所有列進(jìn)行匯總計(jì)數(shù)輸出結(jié)果為:print(df.groupby('性別').count())#按照性別列對所有列進(jìn)行匯總計(jì)數(shù)輸出結(jié)果為:(2.2.8)DataFrame數(shù)據(jù)匯總②對單個字段進(jìn)行分組匯總:print(df.groupby('性別')['班級'].count())#按性別分組,對班級字段進(jìn)行匯總計(jì)數(shù)輸出結(jié)果為:print(df.groupby('性別')['身高'].mean())#按性別分組,對身高字段進(jìn)行計(jì)數(shù)求平均值輸出結(jié)果為:③對兩個字段進(jìn)行分組匯總print(df.groupby(['性別','班級'])['姓名'].count())#匯總不同性別不同班級的人數(shù)輸出結(jié)果為:(2.2.8)DataFrame數(shù)據(jù)匯總(2)使用pivote_table()函數(shù)實(shí)現(xiàn)數(shù)據(jù)透視表功能數(shù)據(jù)透視表功能,能夠分析龐大數(shù)據(jù),更好地發(fā)掘數(shù)據(jù)特征之間的關(guān)系,且不破壞原有數(shù)據(jù);只要指定行、列、值和值的計(jì)算方式(計(jì)數(shù)、合計(jì)、平均等),就可以做出一個數(shù)據(jù)透視表來,方便我們分析數(shù)據(jù)的一些潛在價值。pivote_table()函數(shù)的語法格式:df.pivot_table(index=None,columns=None,values=None,aggfunc=’mean’,fill_value=0,margins=False,margins_name=’All’)(2.2.8)DataFrame數(shù)據(jù)匯總(2.2.8)DataFrame數(shù)據(jù)匯總pivote_table()函數(shù)的常用參數(shù)參數(shù)含義實(shí)例index=None數(shù)據(jù)透視表的行,必須有index='部門'columns=None數(shù)據(jù)透視表的列columns='職稱'values=None數(shù)據(jù)透視表的值,默認(rèn)所有數(shù)字列values='銷售額'aggfunc=’mean’值計(jì)算方式默認(rèn)是mean平均值fill_value=NoneNaN用什么填充默認(rèn)不填充,可以用0填充fill_value=0margins=False是否匯總margins=True時匯總margins_name=’All’匯總欄命名margins_name=’Total’使用pivote_table()進(jìn)行數(shù)據(jù)透視表功能的用法示例:importpandasaspd#導(dǎo)入pandas模塊#構(gòu)建原始數(shù)據(jù)表dfinfo=[['張鵬','女',1,170,3500],['曉梅','女',2,165,2000],['東海','男',1,176,4000],['大海','男',2,178,1500],['金萌','女',1,170,4000],['士發(fā)','男',2,185,7500],['歐陽','男',2,180,8000]]lie=['姓名','性別','部門','身高','獎金']df=pd.DataFrame(data=info,columns=lie)print(df)原始數(shù)據(jù)表df輸出結(jié)果為:(2.2.8)DataFrame數(shù)據(jù)匯總df2=df.pivot_table(index='部門',columns='性別',values='獎金')#生成數(shù)據(jù)透視表df2,以匯總各部門、不同性別人員、獎金的平均值#行:部門,列:性別,值:獎金,計(jì)算方式:默認(rèn)為求平均值print(df2)輸出結(jié)果為:(2.2.8)DataFrame數(shù)據(jù)匯總df3=df.pivot_table(index='部門',columns='性別',values='獎金',aggfunc='max')#生成數(shù)據(jù)透視表df3,匯總各部門、不同性別人員、獎金的最大值print(df3)輸出結(jié)果為:df4=df.pivot_table(index='部門',columns='性別',values='獎金',aggfunc='max',margins=True,margins_name='最高獎金')#生成數(shù)據(jù)透視表df4,匯總各部門、不同性別人員、獎金的最大值#結(jié)果中要求對結(jié)果再匯總,匯總的標(biāo)題為“最高獎金”print(df4)輸出結(jié)果為:(2.2.8)DataFrame數(shù)據(jù)匯總df5=df.pivot_table(index='部門',values=['獎金','身高'])#匯總各部門中,獎金和身高的平均值,多個匯總對象要寫為列表的格式print(df5)輸出結(jié)果為:df6=df.pivot_table(index=['部門','性別'],values=['獎金'],aggfunc='sum',margins=True,margins_name='獎金合計(jì)')#匯總各部門、不同性別人員、獎金之和#要求對結(jié)果再匯總,匯總的標(biāo)題為'獎金合計(jì)'print(df6)輸出結(jié)果為:(2.2.8)DataFrame數(shù)據(jù)匯總(3)matplotlib模塊數(shù)據(jù)可視化是以圖形或圖表的形式展示數(shù)據(jù)。數(shù)據(jù)可視化后,可以更加直觀地幫助人們快速地理解數(shù)據(jù),發(fā)現(xiàn)數(shù)據(jù)的關(guān)鍵點(diǎn)。數(shù)據(jù)可視化技術(shù)是關(guān)于數(shù)據(jù)視覺表現(xiàn)形式的科學(xué)技術(shù)研究。主要指的是較為高級的技術(shù)方法,而這些技術(shù)方法允許利用圖形、圖像處理、計(jì)算機(jī)視覺以及用戶界面,通過表達(dá)、建模以及對立體、表面、屬性以及動畫的顯示,對數(shù)據(jù)加以可視化解釋。Python語言有豐富的、功能強(qiáng)大的、第三方庫的支持,在數(shù)據(jù)可視化方面具有較強(qiáng)的功能。數(shù)據(jù)可視化對于數(shù)據(jù)描述及探索性分析至關(guān)重要。恰當(dāng)?shù)慕y(tǒng)計(jì)圖表可以更有效地傳遞數(shù)據(jù)信息。Python中已經(jīng)有很多可視化方面的第三方庫,如matplotlib、pyecharts、pandas等。matplotlib是一個Python繪圖庫,已經(jīng)成為公認(rèn)的數(shù)據(jù)可視化工具。通過matplotlib可以很輕松地畫一些或簡單或復(fù)雜的圖形,幾行代碼即可生成折線圖、直方圖、條形圖、散點(diǎn)圖等,使用方便簡單。(3.1)matplotlib模塊簡介因?yàn)槔L圖之前還會進(jìn)行數(shù)據(jù)處理,需要用到pandas模塊,因此通常在繪圖之前需要依次導(dǎo)入以下兩個模塊:importpandasaspdimportmatplotlib.pyplotasplt后面將直接使用這些模塊,不再重復(fù)導(dǎo)入。另外,在使用matplotlib模塊繪圖輸入中文數(shù)據(jù)時,經(jīng)常出現(xiàn)亂碼,所以要會設(shè)置中文字體,以下兩行代碼可以直接使用,一般不需要修改,實(shí)例中也不再重復(fù)書寫。plt.rcParams['font.family']='SimHei'plt.rcParams['axes.unicode_minus']=False(3.1)matplotlib模塊簡介1.創(chuàng)建一個畫布(figure)。2.在畫布上創(chuàng)建一個或多個繪圖(plotting)區(qū)域(坐標(biāo)系/坐標(biāo)軸)。3.使用相應(yīng)的繪圖函數(shù)在plotting區(qū)域上描繪點(diǎn)、線等圖形。

常用繪圖函數(shù):(3.2.1)matplotlib繪圖的基本步驟函數(shù)示例功能plt.figure(figsize=(4,3))設(shè)置畫布的大小,寬度4,高度3plt.xlim((0,4))plt.ylim((0,3))設(shè)置x軸顯示范圍為(0,4)設(shè)置y軸顯示范圍為(0,3)plt.xlabel('省份')plt.ylabel('產(chǎn)量')設(shè)置x軸標(biāo)題為'省份'設(shè)置y軸標(biāo)題為'產(chǎn)量'plt.plot(x,y)繪制折線圖plt.bar()繪制條形圖plt.hist()繪制直方圖plt.scatter(x,y)繪制散點(diǎn)圖plt.pie()繪制餅圖plt.boxplot()繪制箱形圖1.繪制折線圖使用matplotlib模塊繪制折線圖用法示例:#要求:使用已知點(diǎn)坐標(biāo)繪制折線圖importpandasaspd

importmatplotlib.pyplotasplt#設(shè)置中文字體plt.rcParams['font.family']='SimHei'plt.rcParams['axes.unicode_minus']=False【注意】以上5行代碼后面的例子中將不再贅述。#創(chuàng)建一個6*4的畫布plt.figure(figsize=(5,4))(3.2.2)matplotlib圖形的分類及繪制方法#設(shè)定已知點(diǎn)坐標(biāo)數(shù)值,例如(-1,3),(0,2)x=[-1,0,1,2,3]y=[3,2,2,4,2]plt.plot(x,y) #以折線圖展示#設(shè)置坐標(biāo)軸顯示范圍plt.xlim((-1,3))plt.ylim((1,4))#設(shè)置坐標(biāo)軸標(biāo)題plt.xlabel('x軸')plt.ylabel('y軸')plt.show() #顯示圖形2.繪制條形圖使用matplotlib模塊繪制條形圖用法示例:#要求:使用已知數(shù)據(jù)繪制條形圖#前面省略5行代碼,見上例#下面是已知數(shù)據(jù):2021年四大一線城市GDP水平GDP=[40270,43215,28232,30665]city=['北京市','上海市','廣州市','深圳市']#繪制條形圖plt.bar(city,GDP)plt.show()(3.2.2)matplotlib圖形的分類及繪制方法#設(shè)置y軸范圍plt.ylim(10000,50000)#設(shè)置坐標(biāo)軸標(biāo)題plt.xlabel('城市')plt.ylabel('GDP水平')#設(shè)置圖表標(biāo)題,默認(rèn)顯示在圖表上方plt.title("2021年四大一線城市GDP水平對比")#顯示圖形在實(shí)際應(yīng)用中,我們可以使用Excel文檔中的數(shù)據(jù)繪制圖形。步驟1:讀取Excel文件并查看步驟2:根據(jù)要求繪制圖形步驟3:將多個圖形一同顯示【例】使用Excel文檔中的數(shù)據(jù)繪制圖形用法示例,要求:使用Excel文檔中的數(shù)據(jù)繪制直方圖:#導(dǎo)入必要模塊,讀取文件,查看讀取的內(nèi)容#前面省略5行代碼,見上例(3.2.2)matplotlib圖形的分類及繪制方法#導(dǎo)入Excel讀寫模塊openpyxlimportopenpyxlasxl#讀取Excel文件'員工檔案表.xlsx'df=pd.read_excel('員工檔案表.xlsx')#展示文件前5行print(df.head())接下來繪制圖形--直方圖,統(tǒng)計(jì)職工年齡分布情況:#創(chuàng)建畫布plt.figure(figsize=(16,12))#使用hist畫直方圖,并設(shè)置參數(shù)(繪圖的內(nèi)容、邊框顏色、圖例標(biāo)題)#根據(jù)文件中‘年齡’數(shù)據(jù),繪制直方圖,黑色描邊,圖例標(biāo)題‘人數(shù)’plt.hist(df['年齡'],edgecolor='k',label='人數(shù)')#設(shè)置圖表標(biāo)題,默認(rèn)顯示在圖表上方(3.2.2)matplotlib圖形的分類及繪制方法plt.title('年齡分布直方圖')#使圖例顯示plt.legend()#顯示圖形plt.show()顯示效果3.繪制餅圖接上例,也可以使用matplotlib模塊繪制餅圖,統(tǒng)計(jì)職男女職工占比情況:#計(jì)算男女人數(shù)總和x1=df['性別'].value_counts()#設(shè)置畫布大小plt.figure(figsize=(4,4))#繪制餅狀圖(內(nèi)容,顯示名稱,顯示比例)plt.pie(x1,labels=x1.index,autopct='%.2f%%')(3.2.2)matplotlib圖形的分類及繪制方法#設(shè)置圖表標(biāo)題,默認(rèn)顯示在圖表上方plt.title('男女職工占比')#顯示圖形plt.show()4.將多個圖像一同顯示為了方便比較和分析,可以將多個圖形一同顯示,接上例,將多個圖形一同顯示在一張畫布上:#創(chuàng)建畫布plt.figure(figsize=(10,4))#1.繪制第一個圖形--直方圖#在畫布上為直方圖規(guī)劃顯示位置:121tu1=plt.subplot(121)plt.hist(df['年齡'],edgecolor='k',label='人數(shù)')plt.title('年齡分布直方圖')plt.legend()(3.2.2)matplotlib圖形的分類及繪制方法#2.繪制第二個圖形--餅圖,計(jì)算男女人數(shù)總和x1=df['性別'].value_counts()#在畫布上為餅圖規(guī)劃顯示位置:122tu2=plt.subplot(122)#繪制餅狀圖(內(nèi)容,顯示名稱,顯示比例)plt.pie(x1,labels=x1.index,autopct='%.2f%%')#設(shè)置圖表標(biāo)題,默認(rèn)顯示在圖表上方plt.title('男女職工占比')#顯示畫布上的所有圖形plt.show()(4)pyecharts模塊Echarts是一個由百度開源的數(shù)據(jù)可視化框架,憑借著良好的交互性,精巧的圖表設(shè)計(jì),得到了眾多開發(fā)者的認(rèn)可。而Python是一門富有表達(dá)力的語言,很適合用于數(shù)據(jù)處理。當(dāng)數(shù)據(jù)分析遇上數(shù)據(jù)可視化時,pyecharts誕生了。pyecharts可以展示動態(tài)圖,在線報(bào)告等,比較美觀且展示數(shù)據(jù)方便,鼠標(biāo)懸停在圖上,即可顯示數(shù)值、標(biāo)簽等,甚至單擊標(biāo)簽實(shí)現(xiàn)部分圖形的關(guān)閉與打開,效果非??犰?。(4.1)pyecharts模塊首先,使用命令

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論