大數(shù)據(jù)技術(shù)在財(cái)務(wù)中的應(yīng)用Python版 課件 任務(wù)4.3 利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理_第1頁(yè)
大數(shù)據(jù)技術(shù)在財(cái)務(wù)中的應(yīng)用Python版 課件 任務(wù)4.3 利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理_第2頁(yè)
大數(shù)據(jù)技術(shù)在財(cái)務(wù)中的應(yīng)用Python版 課件 任務(wù)4.3 利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理_第3頁(yè)
大數(shù)據(jù)技術(shù)在財(cái)務(wù)中的應(yīng)用Python版 課件 任務(wù)4.3 利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理_第4頁(yè)
大數(shù)據(jù)技術(shù)在財(cái)務(wù)中的應(yīng)用Python版 課件 任務(wù)4.3 利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

引入案例任務(wù)分析知識(shí)解析案例解析任務(wù)實(shí)訓(xùn)實(shí)訓(xùn)評(píng)價(jià)4.3.1map()函數(shù)4.3.2apply()函數(shù)4.3.3applymap()函數(shù)任務(wù)4.3

利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理任務(wù)4.3

利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理引入案例根據(jù)企業(yè)銷售統(tǒng)計(jì)表.xlsx(位置:E:\file\),美創(chuàng)科技有限公司決定對(duì)銷售人員的銷售業(yè)績(jī)進(jìn)行考核和獎(jiǎng)勵(lì),根據(jù)銷售額是否超過(guò)45萬(wàn),將銷售人員的銷售業(yè)績(jī)定為達(dá)標(biāo)和未達(dá)標(biāo)。如果未達(dá)標(biāo),銷售獎(jiǎng)金為0;如果達(dá)標(biāo),銷售額低于50萬(wàn)的銷售人員的銷售獎(jiǎng)金為銷售額的1%,銷售額高于等于50萬(wàn)的銷售人員的銷售獎(jiǎng)金為銷售額的1.5%。財(cái)務(wù)人員小王如何在Pandas模塊中實(shí)現(xiàn)呢?任務(wù)分析本任務(wù)利用Pandas模塊中的map()函數(shù)、apply()函數(shù)、applymap()函數(shù)實(shí)現(xiàn)對(duì)DataFrame對(duì)象的逐行、逐列或逐元素的操作,實(shí)現(xiàn)了對(duì)數(shù)據(jù)的靈活處理,也提高了程序的運(yùn)行速度。任務(wù)4.3利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理任務(wù)4.3利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理知識(shí)解析在日常的數(shù)據(jù)處理中,經(jīng)常會(huì)對(duì)一個(gè)DataFrame進(jìn)行逐行、逐列或逐元素的操作,可能首先想到的是用循環(huán)結(jié)構(gòu)來(lái)處理這類問(wèn)題,但是這樣做顯然也失去了使用Pandas數(shù)據(jù)結(jié)構(gòu)的優(yōu)勢(shì),并且也會(huì)使你的程序運(yùn)行性能速度大大降低。而使用Pandas中的map()、apply()和applymap()函數(shù)無(wú)需通過(guò)循環(huán)就可以滿足數(shù)據(jù)處理需求。4.3.1map()函數(shù)map()函數(shù)可以用于Series對(duì)象或DataFrame對(duì)象的一列,接收函數(shù)或字典對(duì)象作為參數(shù),對(duì)指定序列逐一映射,返回經(jīng)過(guò)函數(shù)或字典映射處理后的值。其語(yǔ)法格式如下:Series.map(functionordict,na_action=None)map()函數(shù)參數(shù)說(shuō)明:functionordict:可接收l(shuí)ambda表達(dá)式、自定義函數(shù)(def)、Python內(nèi)置函數(shù)和字典;na_action:默認(rèn)na_action=None,表示將函數(shù)應(yīng)用于缺失值,na_action='ignore'表示忽略缺失值,即函數(shù)不應(yīng)用于缺失值(并將其保留為NaN)。任務(wù)4.3利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理【做中學(xué)4.3.1】讀入fin_data.xlsx(位置:E:\file\)中的“利潤(rùn)表項(xiàng)目”工作表,據(jù)此計(jì)算出凈利潤(rùn)率,然后進(jìn)行以下操作:(1)根據(jù)凈利率進(jìn)行業(yè)績(jī)?cè)u(píng)價(jià),使用map()函數(shù)將凈利率超過(guò)20%的月份標(biāo)記為達(dá)標(biāo),否則不達(dá)標(biāo);(2)根據(jù)業(yè)績(jī)?cè)u(píng)價(jià)結(jié)果確定是否發(fā)放獎(jiǎng)金,業(yè)績(jī)達(dá)標(biāo)則發(fā)放,否則不發(fā)放。讀入Excel表格并計(jì)算凈利潤(rùn)率。程序如下:importpandasaspd#引入pandas模塊#讀取“利潤(rùn)表項(xiàng)目”工作表df=pd.read_excel(r'E:\file\fin_data.xlsx',sheet_name=1,converters={'年':str,'月':str})df['凈利率']=df['凈利潤(rùn)']/df['營(yíng)業(yè)收入’]#計(jì)算凈利率df.head()#查看前5行數(shù)據(jù)STEP01【做中學(xué)4.3.1】解析如下:任務(wù)4.3利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理使用Series.map(function)的形式進(jìn)行業(yè)績(jī)?cè)u(píng)價(jià)。程序如下:df['業(yè)績(jī)?cè)u(píng)價(jià)']=df['凈利率'].map(lambdax:'達(dá)標(biāo)'ifx>0.2else'不達(dá)標(biāo)')df.head()#查看df前5行數(shù)據(jù)STEP02【請(qǐng)注意】map()函數(shù)的function參數(shù)不僅可以接收l(shuí)ambda表達(dá)式,還可以接收自定義函數(shù)(def)或python內(nèi)置函數(shù),使用函數(shù)名作為map()函數(shù)的參數(shù)。任務(wù)4.3

利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理

從輸出結(jié)果來(lái)看,新增一列業(yè)績(jī)?cè)u(píng)價(jià),其值為達(dá)標(biāo)或不達(dá)標(biāo),其原理是將凈利潤(rùn)率列每個(gè)元素逐一傳入lambda()函數(shù)得到返回值,如下圖所示。任務(wù)4.3利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理使用Series.map(dict)的形式確定是否發(fā)放獎(jiǎng)金。程序如下:df['是否發(fā)放獎(jiǎng)金']=df['業(yè)績(jī)?cè)u(píng)價(jià)'].map({'達(dá)標(biāo)':'發(fā)放','不達(dá)標(biāo)':'不發(fā)放'})df.head()#查看df前5行數(shù)據(jù)STEP03任務(wù)4.3利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理

從輸出結(jié)果來(lái)看,新增一列是否發(fā)放獎(jiǎng)金,其值為發(fā)放或不發(fā)放,其原理是將業(yè)績(jī)?cè)u(píng)價(jià)列每個(gè)元素逐一傳入字典作為鍵,返回對(duì)應(yīng)的值,如下圖所示。不論是利用字典參數(shù)還是函數(shù)進(jìn)行映射,map()函數(shù)都是把對(duì)應(yīng)的數(shù)據(jù)逐個(gè)當(dāng)作參數(shù)傳入到字典或函數(shù)中,得到映射后的值。任務(wù)4.3利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理4.3.2apply()函數(shù)一、Series.apply()

Series.apply()函數(shù)在Series值上調(diào)用函數(shù),與Series.map()類似,區(qū)別在于apply()函數(shù)能夠傳入功能更復(fù)雜的函數(shù)。Series.apply()函數(shù)語(yǔ)法格式如下:Series.apply(func,convert_dtype=True,args=(),**kwargs)Series.apply()函數(shù)參數(shù)說(shuō)明參數(shù)說(shuō)明func接收函數(shù)。表示要應(yīng)用的Python函數(shù)或NumPyufunc。convert_dtype接收bool,默認(rèn)True。嘗試為所有元素應(yīng)用函數(shù)后的結(jié)果找到更好的數(shù)據(jù)類型。如果為False,則保留dtype=object。args接收元組。除了序列之外,要傳遞給函數(shù)的位置參數(shù)。單個(gè)元素需在括號(hào)內(nèi)加逗號(hào)。**kwargs表示傳遞給func的其他關(guān)鍵字?jǐn)?shù)。任務(wù)4.3利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理【做中學(xué)4.3.2】以【做中學(xué)4.3.1】最終生成的df數(shù)據(jù)對(duì)象為基礎(chǔ),現(xiàn)需要調(diào)整營(yíng)業(yè)收入金額,而具體調(diào)整的金額未知,請(qǐng)使用Series.apply()函數(shù)實(shí)現(xiàn)營(yíng)業(yè)收入的調(diào)整。【做中學(xué)4.3.2】解析如下:因需要對(duì)營(yíng)業(yè)收入進(jìn)行調(diào)整(加上或減去一個(gè)值),由于這個(gè)加上或減去的值未知,可使用自定義函數(shù)并需要多加一個(gè)參數(shù),此時(shí)map()函數(shù)是不能實(shí)現(xiàn)的(因map()函數(shù)只有一個(gè)參數(shù)),而apply()函數(shù)可以解決這個(gè)問(wèn)題。#自定義函數(shù),返回x+y的值deff(x,y):returnx+ySTEP01STEP02#對(duì)每月營(yíng)業(yè)收入調(diào)增1000,增加一列“營(yíng)業(yè)成本新”df['營(yíng)業(yè)收入新']=df['營(yíng)業(yè)收入'].apply(f,args=(1000,))df[['營(yíng)業(yè)收入','營(yíng)業(yè)收入新']].head()#觀察營(yíng)業(yè)收入的變化任務(wù)4.3利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理二、DataFrame.apply()DataFrame.apply()函數(shù)語(yǔ)法格式如下:DataFrame.apply(func,axis=0,broadcast=None,raw=False,reduce=None,result_type=None,args=(),**kwds)DataFrame.apply()函數(shù)常用參數(shù)說(shuō)明參數(shù)說(shuō)明func接收函數(shù)。表示應(yīng)用到每行或每列的Python函數(shù)或NumPyufunc。axis接收bool或string。表示函數(shù)應(yīng)用所沿著的軸。axis=0或’index’時(shí)表示在每一列上應(yīng)用函數(shù);axis=1或’columns’時(shí)表示在每一行上應(yīng)用函數(shù)。raw接收bool。確定行或列以Series還是ndarray對(duì)象傳遞。False:表示將每一行或每一列作為一個(gè)Series傳遞給函數(shù);True:表示傳遞的函數(shù)將接收ndarray對(duì)象。如果你只是應(yīng)用一個(gè)NumPy還原函數(shù),這將獲得更好的性能。result_type接收'expand'、'reduce'、'broadcast'和None,默認(rèn)為None。只有在axis=1(列)時(shí)才會(huì)發(fā)揮作用。expand:表示列表式的結(jié)果將被轉(zhuǎn)化為列。reduce:表示如果可能的話,返回一個(gè)Series,而不是展開類似列表的結(jié)果,這與expand相反。broadcast:表示結(jié)果將被廣播到DataFrame的原始形狀,原始索引和列將被保留。args接收元組。除了序列之外,要傳遞給函數(shù)的位置參數(shù)。任務(wù)4.3利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理1.axis=0時(shí)apply()函數(shù)的使用【做中學(xué)4.3.3】讀入fin_data.xlsx(位置:E:\file\)中的“利潤(rùn)表項(xiàng)目”工作表,使用apply()函數(shù)將營(yíng)業(yè)收入、營(yíng)業(yè)成本、凈利潤(rùn)以“萬(wàn)元”為單位展示。importpandasaspd#導(dǎo)入pandas模塊df=pd.read_excel(r'E:\file\fin_data.xlsx',sheet_name=1,converters={'年':str,'月':str})df1=df[["營(yíng)業(yè)收入","營(yíng)業(yè)成本","凈利潤(rùn)"]].apply(lambdax:round(x/10000,2))df1.head()#查看前5行數(shù)據(jù)【請(qǐng)注意】當(dāng)apply()函數(shù)中沒設(shè)置axis參數(shù)時(shí),則默認(rèn)axis=0,這時(shí)會(huì)將各列(columns)以series的形式作為參數(shù),傳入到指定的操作方法中,操作后合并且返回相應(yīng)結(jié)果。【做中學(xué)4.3.3】程序如下:任務(wù)4.3利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理DataFrame.apply(axis=0)工作原理圖任務(wù)4.3利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理2.axis=1時(shí)apply()函數(shù)的使用【做中學(xué)4.3.4】讀入fin_data.xlsx(位置:E:\file\)中的“利潤(rùn)表項(xiàng)目”工作表,利用DataFrame.apply()函數(shù)計(jì)算每個(gè)月的毛利率。STEP01導(dǎo)入pandas模塊并讀取利潤(rùn)表項(xiàng)目,程序如下:importpandasaspddf=pd.read_excel(r'E:\file\fin_data.xlsx',sheet_name=1,converters={'年':str,'月':str})自定義函數(shù)計(jì)算毛利率,并保留2位小數(shù),程序如下:deffunc(x):x['毛利率']=round((x['營(yíng)業(yè)收入']-x['營(yíng)業(yè)成本'])/x['營(yíng)業(yè)收入'],2)returnxSTEP02【做中學(xué)4.3.4】解析如下:任務(wù)4.3利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理STEP03df1=df[['營(yíng)業(yè)收入','營(yíng)業(yè)成本','凈利潤(rùn)']].apply(func,axis=1)df1.head()#查看前5行數(shù)據(jù)任務(wù)4.3利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理DataFrame.apply(axis=1)工作原理圖任務(wù)4.3利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理4.3.3applymap()函數(shù)applymap()函數(shù)用來(lái)對(duì)DataFrame中的每個(gè)元素執(zhí)行指定方法(函數(shù)或lambda表達(dá)式)的操作。其語(yǔ)法格式為:DataFrame.applymap(function)【做中學(xué)4.3.5】讀入fin_data.xlsx(位置:E:\file\)中的“利潤(rùn)表項(xiàng)目”工作表,將DataFrame中的營(yíng)業(yè)收入、營(yíng)業(yè)成本和凈利潤(rùn)統(tǒng)一保留1位小數(shù)顯示。importpandasaspd#導(dǎo)入pandas模塊df=pd.read_excel(r'E:\file\fin_data.xlsx',sheet_name=1,converters={'年':str,'月':str})df1=df[['營(yíng)業(yè)收入','營(yíng)業(yè)成本','凈利潤(rùn)']].applymap(lambdax:"%.1f"%x)df1.head()#查看前5行數(shù)據(jù)【做中學(xué)4.3.3】程序如下:任務(wù)4.2利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)篩選讀入銷售統(tǒng)計(jì)表.xlsx(位置:E:\file\)。程序如下:importpandasaspd#導(dǎo)入Pandas模塊df=pd.read_excel(r'E:\file\銷售統(tǒng)計(jì)表.xlsx')df.head()#查看前5行數(shù)據(jù)STEP01根據(jù)銷售額進(jìn)行業(yè)績(jī)?cè)u(píng)價(jià)。程序如下:df['業(yè)績(jī)?cè)u(píng)價(jià)']=df['銷售額'].apply(lambdax:'達(dá)標(biāo)'ifx>450000else'不達(dá)標(biāo)')df.head()#查看前5行數(shù)據(jù)STEP02案例解析任務(wù)4.3利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理根據(jù)業(yè)績(jī)?cè)u(píng)價(jià)列、銷售額列計(jì)算銷售獎(jiǎng)金。程序如下:defsal_bonus(x):i

溫馨提示

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

評(píng)論

0/150

提交評(píng)論