




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)預(yù)處理項(xiàng)目四Pandas的基本操作任務(wù)4.1利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)篩選任務(wù)4.2利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理任務(wù)4.3利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)合并任務(wù)4.4目錄利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)清洗任務(wù)4.5引入案例任務(wù)分析知識解析案例解析任務(wù)實(shí)訓(xùn)實(shí)訓(xùn)評價4.1.1Pandas數(shù)據(jù)結(jié)構(gòu)4.1.2DataFrame創(chuàng)建方法與屬性4.1.3DataFrame的基本操作4.1.4DataFrame的簡單運(yùn)算4.1.5Pandas讀寫外部文件任務(wù)4.1Pandas的基本操作任務(wù)4.1Pandas的基本操作引入案例在Excel文件中,數(shù)據(jù)量一旦超過10000行,利用Excel處理起來就會非常慢。于是,美創(chuàng)科技有限公司財(cái)務(wù)人員小王想把財(cái)務(wù)數(shù)據(jù)表fin_data.xlsx(E:\file\)導(dǎo)入到Python中,利用Pandas模塊可以查看表格的基本屬性,進(jìn)行行、列的新增、刪除操作或簡單計(jì)算。這樣的操作在Pandas模塊中如何實(shí)現(xiàn)呢?任務(wù)分析要想把外部財(cái)務(wù)數(shù)據(jù)導(dǎo)入到Python中,就要用到Pandas讀寫外部文件的函數(shù),讀進(jìn)來之后默認(rèn)存儲為DataFrame對象,可利用相關(guān)函數(shù)查看其基本屬性,然后進(jìn)行新增或刪除等基本操作,還可以進(jìn)行簡單的算術(shù)運(yùn)算。知識解析Pandas是Python的第三方庫,是數(shù)據(jù)分析工作中最常用并且最重的一個數(shù)據(jù)分析工具包,可以處理包含不同類型數(shù)據(jù)的復(fù)雜表格和時間序列。它易于使用、開源,并且允許處理大量數(shù)據(jù),能夠快速高效的處理缺失數(shù)據(jù),對數(shù)據(jù)進(jìn)行切片、聚合、整理和匯總統(tǒng)計(jì)等。Pandas具有許多與SQL或Excel相同的功能,并且可以讀取各種外部文件,比如CSV文件、文本文件、MicrosoftExcel文件、SQL數(shù)據(jù)庫文件等,允許將不同來源的數(shù)據(jù)集轉(zhuǎn)換為DataFrame對象。在使用Pandas進(jìn)行數(shù)據(jù)處理時,首先要導(dǎo)入Pandas模塊,其語法格式如下:importpandasaspd執(zhí)行這條語句表示引入Pandas模塊,并為pandas模塊起別名pd,這個pd是一個約定成俗的名字。在以后的編程語句中,pandas與pd等同。Pandas包含Series和DataFrame兩種數(shù)據(jù)類型,其中DataFrame數(shù)據(jù)類型就相當(dāng)于Excel表格數(shù)據(jù)的行和列,而Series數(shù)據(jù)類型就相當(dāng)于Excel表中的一列或一行。Series是一種基于NumPy數(shù)組的一維數(shù)據(jù)結(jié)構(gòu),如右圖所示,由一組數(shù)據(jù)(各種NumPy類型)及與之相關(guān)的數(shù)據(jù)索引(index)組成。類似于Python列表,每個元素帶有一個自動索引(索引從0開始,也稱為原始索引),除自動索引外,還可以自定義索引,自定義索引可以是數(shù)字或字符串。【請注意】Series中的自定義索引值是可以重復(fù)的。4.1.1Pandas數(shù)據(jù)結(jié)構(gòu)一、Series數(shù)據(jù)結(jié)構(gòu)任務(wù)4.1Pandas的基本操作1.Series對象的創(chuàng)建Series類型可由Python列表、字典、NumPy數(shù)組等數(shù)據(jù)類型創(chuàng)建。利用列表創(chuàng)建Series時,列表的元素就是Series的值,而Series的索引可以通過index參數(shù)創(chuàng)建,并且索引的個數(shù)與值的個數(shù)要保持一致。利用一維數(shù)組創(chuàng)建Series時,一維數(shù)組的值就是Series的值,而Series的索引可以通過index參數(shù)創(chuàng)建,并且索引的個數(shù)與值的個數(shù)要保持一致。利用字典創(chuàng)建Series時,字典的鍵key就是Series的索引index,字典的值value就是Series的值。任務(wù)4.1Pandas的基本操作【做中學(xué)4.1.1】編寫程序,分別利用列表、一維數(shù)組和字典創(chuàng)建Series。利用列表創(chuàng)建的Series為:0庫存現(xiàn)金1銀行存款2應(yīng)收賬款dtype:object利用數(shù)組創(chuàng)建的Series為:1001庫存現(xiàn)金1002銀行存款1122應(yīng)收賬款dtype:object利用字典創(chuàng)建的Series為:1001庫存現(xiàn)金1002銀行存款1122應(yīng)收賬款dtype:objectimportnumpyasnp#導(dǎo)入Numpy模塊importpandasaspd#導(dǎo)入Pandas模塊#利用列表創(chuàng)建Series,先創(chuàng)建列表list1=['庫存現(xiàn)金','銀行存款','應(yīng)收賬款']#不指定索引,默認(rèn)為從0開始的原始索引ser1=pd.Series(list1)print('利用列表創(chuàng)建的Series為:\n',ser1)#利用數(shù)組創(chuàng)建Series,先創(chuàng)建數(shù)組arr=np.array(['庫存現(xiàn)金','銀行存款','應(yīng)收賬款'])#用index參數(shù)指定索引ser2=pd.Series(arr,index=['1001','1002','1122'])print('利用數(shù)組創(chuàng)建的Series為:\n',ser2)#利用字典創(chuàng)建Series,先創(chuàng)建字典dict1={'1001':'庫存現(xiàn)金','1002':'銀行存款','1122':'應(yīng)收賬款'}ser3=pd.Series(dict1)print('利用字典創(chuàng)建的Series為:\n',ser3)【做中學(xué)4.1.1】程序如下:任務(wù)4.1Pandas的基本操作2.Series對象的數(shù)據(jù)查詢
Series對象的數(shù)據(jù)查詢方式類似一維ndarray對象,可以通過值的位置序號獲取,同時由于每個值都關(guān)聯(lián)了索引標(biāo)簽,也可以通過索引來查詢。ser=pd.Series([4,7,-5,3],index=['d','b','a','c'])查詢方式語法格式說明舉例利用位置查詢Series[下標(biāo)值]選取單個值輸入程序:ser[2]輸出結(jié)果:-5Series[下標(biāo)值列表]選取多個值輸入程序:ser[[1,3]]輸出結(jié)果:b7
c3dtype:int64Series[下標(biāo)值1:下標(biāo)值2]切片操作輸入程序:ser[1:3]輸出結(jié)果:b7
a-5dtype:int64任務(wù)4.1Pandas的基本操作查詢方式語法格式說明舉例利用索引查詢Series[索引]選取單個值輸入程序:ser['a']輸出結(jié)果:-5Series[索引列表]選取多個值輸入程序:ser[['d','a']]輸出結(jié)果:d4a-5dtype:int64Series[索引1:索引2]切片操作輸入程序:ser['d':'a’]輸出結(jié)果:d4
b7a-5dtype:int64
ser=pd.Series([4,7,-5,3],index=['d','b','a','c'])任務(wù)4.1Pandas的基本操作查詢方式語法格式說明舉例利用索引器loc查詢Series.loc[索引]選取單個值輸入程序:ser.loc['a']輸出結(jié)果:-5Series.loc[索引列表]選取多個值輸入程序:ser.loc[['d','a']]輸出結(jié)果:d4
a-5dtype:int64Series.loc[索引1:索引2]切片操作輸入程序:ser.loc['d':'a']輸出結(jié)果:d4b7a-5dtype:int64條件查詢Series[條件表達(dá)式]選取滿足條件的值輸入程序:ser[ser>0]輸出結(jié)果:d4b7c3dtype:int64ser=pd.Series([4,7,-5,3],index=['d','b','a','c'])任務(wù)4.1Pandas的基本操作3.Series對象的修改、增加及刪除操作說明舉例修改Series對象的修改是建立在查詢的基礎(chǔ)上,通過查詢操作選取到單個值或多個值,然后通過賦值操作進(jìn)行修改。輸入程序:ser[2]=5ser輸出結(jié)果:d4
b7a5c3dtype:int64刪除Series對象的刪除操作通過drop()函數(shù)實(shí)現(xiàn)。輸入程序:ser3=ser.drop(['d','a’])ser3輸出結(jié)果:b7
c3
dtype:int64ser=pd.Series([4,7,-5,3],index=['d','b','a','c'])任務(wù)4.1Pandas的基本操作操作說明舉例增加Series對象不能直接添加新數(shù)據(jù),需要將新數(shù)據(jù)單獨(dú)創(chuàng)建為一個新的Series對象,然后用append()添加到原有的Series對象中。輸入程序:ser1=pd.Series([-6,6])
ser2=ser.append(ser1)
ser2輸出結(jié)果:d4b7a5c30-616dtype:int64ser=pd.Series([4,7,-5,3],index=['d','b','a','c'])任務(wù)4.1Pandas的基本操作DataFrame數(shù)據(jù)結(jié)構(gòu)如下圖所示,與Series類似,也是由索引和數(shù)據(jù)構(gòu)成,不同的是,DataFrame的索引不僅有行索引,還有列索引。行索引用index表示,列索引用columns表示,如果沒有傳入行索引或列索引,DataFrame會默認(rèn)自動創(chuàng)建一個從0開始的整數(shù)索引,這種索引稱為自動索引或原始索引。行索引位于最左邊一列,而列索引位于最上面一行。二、DataFrame數(shù)據(jù)結(jié)構(gòu)任務(wù)4.1Pandas的基本操作4.1.2DataFrame創(chuàng)建方法與屬性一、DataFrame的創(chuàng)建方法創(chuàng)建DataFrame對象的一般語法格式如下:
pd.DataFrame(data,columns=[序列],index=[序列])在創(chuàng)建DataFrame對象時,行索引和列索引可以通過columns和index參數(shù)指定,若沒有明確指出,則會被設(shè)置為默認(rèn)值,默認(rèn)為自動從0開始的連續(xù)數(shù)字。而其中的data主要有兩類數(shù)據(jù)類型創(chuàng)建:(1)使用字典類創(chuàng)建,如:①數(shù)組、列表、元組構(gòu)成的字典;②Series構(gòu)造的字典;③字典構(gòu)造的字典。(2)使用列表類創(chuàng)建,如:①二維數(shù)組構(gòu)成的列表;②字典構(gòu)造的列表;③Series構(gòu)成的列表。任務(wù)4.1Pandas的基本操作創(chuàng)建方法程序?qū)嵗梢痪S數(shù)組組成的字典創(chuàng)建data={'公司':np.array(['一分廠','二分廠','三分廠']),'收入':np.array([2000000,1500000,1300000]),'成本':np.array([1650000,1350000,1050000])}df=pd.DataFrame(data)由一維列表組成的字典創(chuàng)建data={'公司':['一分廠','二分廠','三分廠'],'收入':[2000000,1500000,1300000],'成本':[1650000,1350000,1050000]}df=pd.DataFrame(data)由Series組成的字典創(chuàng)建data={'公司':pd.Series(['一分廠','二分廠','三分廠']),'收入':pd.Series([2000000,1500000,1300000]),'成本':pd.Series([1650000,1350000,1050000])}df=pd.DataFrame(data)【做中學(xué)4.1.2】擬創(chuàng)建如下圖所示的DataFrame對象,可以采用的創(chuàng)建方法如表所示。任務(wù)4.1Pandas的基本操作【做中學(xué)4.1.2】擬創(chuàng)建如下圖所示的DataFrame對象,可以采用的創(chuàng)建方法如下表所示。創(chuàng)建方法程序?qū)嵗啥S數(shù)組創(chuàng)建data=np.array([['一分廠',2000000,1650000],['二分廠',1500000,1350000],['三分廠',1300000,1050000]])df=pd.DataFrame(data,columns=['公司','收入','成本'])由嵌套列表創(chuàng)建data=[['一分廠',2000000,1650000],['二分廠',1500000,1350000],['三分廠',1300000,1050000]]df=pd.DataFrame(data,columns=['公司','收入','成本'])由字典組成的列表創(chuàng)建data=[{'公司':'一分廠','收入':2000000,'成本':1650000},{'公司':'二分廠','收入':1500000,'成本':1350000},{'公司':'三分廠','收入':1300000,'成本':1050000}]df=pd.DataFrame(data)由字典組成的字典創(chuàng)建data={'公司':{0:'一分廠',1:'二分廠',2:'三分廠'},'收入':{0:2000000,1:1500000,2:1300000},'成本':{0:1650000,1:1350000,2:1050000}}df=pd.DataFrame(data)任務(wù)4.1Pandas的基本操作二、DataFrame的屬性DataFrame的屬性包括形狀(行數(shù)與列數(shù))、元素個數(shù)、列索引、行索引等,以【做中學(xué)4.1.2】中創(chuàng)建的DataFrame對象為例,查看其屬性的操作如下表所示。屬性說明實(shí)例結(jié)果indexDataFrame的行索引df.indexInt64Index([0,1,2],dtype='int64')columnsDataFrame的列索引df.columnsIndex(['公司','收入','成本'],dtype='object')valuesDataFrame的Numpy原生二維數(shù)組數(shù)據(jù)df.valuesarray([['一分廠',2000000,1650000],['二分廠',1500000,1350000],
['三分廠',1300000,1050000]],dtype=object)shapeDataFrame的形狀df.shape(3,3)sizeDataFrame的元素個數(shù)df.size9ndimDataFrame的維數(shù)df.ndim2dtypesDataFrame的數(shù)據(jù)類型df.dtypes公司
object收入
int64成本
int64dtype:object任務(wù)4.1Pandas的基本操作4.1.3DataFrame的基本操作DataFrame作為一種二維表的數(shù)據(jù)結(jié)構(gòu),其基本操作包括索引操作和數(shù)據(jù)內(nèi)容的操作。索引操作包括重生索引、重設(shè)索引、重命名索引、還原索引和軸向變換;數(shù)據(jù)內(nèi)容的操作包括增加和刪除操作,如增刪行和列,在實(shí)際應(yīng)用中新增列的情況比較多。一、DataFrame的索引操作索引操作說明語法格式重生索引對原來的DataFrame重新生成索引,索引既可以包括原來的索引,也可以引入新的索引DataFrame.reindex(labels=None,index=None,columns=None,axis=None,method=None,copy=True,level=None,fill_value=nan,limit=None,tolerance=None)其中:①labels:可選,表示新index或columns,和axis聯(lián)合使用;②index:可選,表示要使用的新的行索引;③columns:可選,表示要使用的新的列索引;④method:用于在重生索引的DataFrame中填充的方法;⑤fill_value:默認(rèn)為np.NaN,用于缺失值的填充;⑥limit:int,默認(rèn)None,向前或向后填充的連續(xù)元素的最大數(shù)量。任務(wù)4.1Pandas的基本操作索引操作說明語法格式還原索引將DataFrame對象的行索引還原為原始索引DataFrame.reset_index(level=None,drop=False,inplace=False,col_level=0,col_fill='')其中:①level:接收int、str、tuple或list,表示僅從索引中刪除給定級別。默認(rèn)情況下移除所有級別。②drop:表示索引列是否還原為普通列,否則會丟失,默認(rèn)值為False;③inplace:是否在原DataFrame上修改,默認(rèn)為False;④col_level:int或str,默認(rèn)值為0,如果列有多個級別,則確定將標(biāo)簽插入到哪個級別。默認(rèn)情況下,它將插入到第一級;⑤col_fill:對象,默認(rèn)‘’,如果列有多個級別,則確定其他級別的命名方式。如果沒有,則重復(fù)索引名。重設(shè)索引將DataFrame行索引修改為DataFrame中的某一列或幾列DataFrame.set_index(keys,drop=True,append=False,inplace=False,verify_integrity=False)其中:①keys:表示要設(shè)置為索引的列名(如有多個應(yīng)放在一個列表里);②drop:將設(shè)置為索引的列刪除,默認(rèn)為True;③append:是否將新的索引追加到原索引后(即是否保留原索引),默認(rèn)為False;④inplace:是否在原DataFrame上修改,默認(rèn)為False;⑤verify_integrity:是否檢查索引有無重復(fù),默認(rèn)為False。任務(wù)4.1Pandas的基本操作索引操作說明語法格式重命名索引用來修改Dataframe的行索引index和列名DataFrame.rename(mapper=None,index=None,columns=None,axis=None,copy=True,inplace=False,level=None)其中:①mapper:映射器,類似于字典,應(yīng)用于特定軸標(biāo)簽,與axis聯(lián)合使用;②index:更改行索引名稱;③columns:更改列名;④axis:int或字符串值,0表示行,1表示列,默認(rèn)為0,確定mapper所針對的軸;⑤inplace:是否在原DataFrame上修改,默認(rèn)為False。軸向變換列索引轉(zhuǎn)化為行索引DataFrame.stack(level=-1,dropna=Ture)其中:①level:表示要轉(zhuǎn)換的索引軸,取值可以為int、str、list,默認(rèn)取值為-1,表示轉(zhuǎn)換最內(nèi)層的列索引,轉(zhuǎn)換后為最內(nèi)層的行索引;②dropna:表示是否刪除所有值均缺失的行,默認(rèn)為True。行索引轉(zhuǎn)化為列索引DataFrame.unstack(level=-1,fill_value=None)其中:①level:表示要轉(zhuǎn)換的索引軸,取值可以為int、str、list,默認(rèn)取值為-1,表示轉(zhuǎn)換最內(nèi)層的行索引,轉(zhuǎn)換后為最內(nèi)層的列索引;②fill_value:取值可以為int、str、list,表示缺失值替換方式。任務(wù)4.1Pandas的基本操作【做中學(xué)4.1.3】編寫程序?qū)崿F(xiàn)下圖所示DataFrame對象索引的變化。importnumpyasnpimportpandasaspddata={'公司':['一分廠','二分廠','三分廠’],
'收入':[2000000,1500000,1300000],
'成本':[1650000,1350000,1050000]}df=pd.DataFrame(data)df1=df.reindex(index=[1,2,0])df2=df1.set_index('公司’,inplace=True)df3=df2.rename(columns={'收入':'income','成本':'cost’},index={'二分廠':'Factory2'},inplace=True)df4=df3.reset_index()【做中學(xué)4.1.3】程序如下:任務(wù)4.1Pandas的基本操作二、新增列數(shù)據(jù)方法語法格式利用直接賦值DataFrame[new_col]=value,其中:new_col表示新增的列名。利用公式計(jì)算DataFrame[new_col]=DataFrame[col]+DataFrame[col]說明:不限兩列間的加法運(yùn)算,也可以進(jìn)行減法、除法和乘法運(yùn)算,當(dāng)然也可以進(jìn)行多列間的簡單算術(shù)運(yùn)算。其中col表示已經(jīng)存在的列名。利用insert()函數(shù)插入新列DataFrame.insert(loc,column,value,allow_duplicates=False)參數(shù)說明:①loc:接收int,表示插入列的位置,插入第一列為loc=O;②column:表示插入列的列名;③value:表示插入的值,可以為數(shù)值、Series、數(shù)組等;④allow_duplicates:表示是否允許列名重復(fù),默認(rèn)False,如果列名已經(jīng)存在則報錯,設(shè)置為True表示允許列名重復(fù)。任務(wù)4.1Pandas的基本操作【做中學(xué)4.1.4】編寫程序,要求采用三種不同的方法實(shí)現(xiàn)下圖中DataFrame對象列的增加。importnumpyasnpimportpandasaspddata={'公司':['一分廠','二分廠','三分廠’],'收入':[2000000,1500000,1300000],'成本':[1650000,1350000,1050000]}df=pd.DataFrame(data)df['時間']='2021年'df['毛利']=df['收入']-df['成本’]df.insert(loc=1,column='地點(diǎn)’,value=['中國','美國','印度'])【做中學(xué)4.1.4】程序如下:任務(wù)4.1Pandas的基本操作三、刪除列數(shù)據(jù)刪除方法語法格式說明deldelDataFrame[col]無返回值,改變原值。pop()DataFrame.pop(col)返回被刪除的值,改變原值。drop()DataFrame.drop(labels,axis=1)DataFrame.drop(columns=[col1,clol2,…])返回刪除后的剩余值,不改變原值,如果要修改原值,需增加參數(shù)inplace=True即可。任務(wù)4.1Pandas的基本操作【做中學(xué)4.1.5】編寫程序以下操作:對【做中學(xué)4.1.4】最終生成的DataFrame對象df使用del、pop()、drop()方法進(jìn)行刪除操作,如下圖所示。deldf['時間']#刪除時間列df.pop('地點(diǎn)')#刪除地點(diǎn)列df.drop("毛利",axis=1,inplace=True)#刪除毛利列【做中學(xué)4.1.5】程序如下:任務(wù)4.1Pandas的基本操作四、行數(shù)據(jù)的增加和刪除行的增加可以使用索引器loc方法,然后利用列表和字典進(jìn)行賦值,也可以用其他方法。行的刪除仍然可以使用drop方法,其語法格式有如下兩種:DataFrame.drop(index=[index1,index2,…])DataFrame.drop(label,axis=0)【做中學(xué)4.1.6】編寫程序?qū)崿F(xiàn)下圖中DataFrame對象行的增加和刪除。importnumpyasnpimportpandasaspddata={'公司':['一分廠','二分廠','三分廠'],'收入':[2000000,1500000,1300000],'成本':[1650000,1350000,1050000]}df=pd.DataFrame(data)df.loc[3]=['四分廠',1850000,150000]df.drop(1,axis=0,inplace=True)【做中學(xué)4.1.6】程序如下:任務(wù)4.1Pandas的基本操作四、DataFrame的轉(zhuǎn)置及數(shù)據(jù)類型轉(zhuǎn)換利用Pandas將DataFrame對象的行和列相互調(diào)換,可以使用矩陣轉(zhuǎn)置操作實(shí)現(xiàn),其語法格式為:DataFame.T在Pandas中可以使用astype()進(jìn)行數(shù)據(jù)類型的強(qiáng)制轉(zhuǎn)換。astype()的一般用法格式如下:DataFrame[column].astype(dtype_new)【做中學(xué)4.1.7】解析如下:(1)創(chuàng)建DateFrame對象。程序如下:importpandasaspd#引入Pandas模塊importnumpyasnp#引入Numpy模塊data={"期初余額":[85000,97000,116000],"期末余額":[70000.15,50000.75,126000.55]}df=pd.DataFrame(data,index=["應(yīng)收賬款","應(yīng)付賬款","實(shí)收資本"])df#查看df【做中學(xué)4.1.7】創(chuàng)建一個DataFame對象,首先通過轉(zhuǎn)置操作實(shí)現(xiàn)行列的調(diào)換,然后進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。任務(wù)4.1Pandas的基本操作(2)對df進(jìn)行轉(zhuǎn)置操作。程序如下:df.T#轉(zhuǎn)置操作,T為轉(zhuǎn)置運(yùn)算符(3)將df中期末余額列數(shù)據(jù)轉(zhuǎn)化為整數(shù)。程序如下:df['期末余額']=df['期末余額'].astype('int’)df#查看df運(yùn)行結(jié)果運(yùn)行結(jié)果任務(wù)4.1Pandas的基本操作4.1.3
DataFrame的簡單運(yùn)算一、DataFrame與Series之間的轉(zhuǎn)化【做中學(xué)4.1.8】編寫程序?qū)ataFrame中的一列轉(zhuǎn)化成Series,然后再將該Series轉(zhuǎn)化成DataFrame。importnumpyasnp#導(dǎo)入Numpy模塊importpandasaspd#導(dǎo)入Pandas模塊data={'公司':['一分廠','二分廠','三分廠'],'收入':[2000000,1500000,1300000],'成本':[1650000,1350000,1050000]}df=pd.DataFrame(data)income=df['收入']#取收入列轉(zhuǎn)化為Seriesprint(income)#打印incomeprint(type(income))#查看income的數(shù)據(jù)類型df1=pd.DataFrame(income)#將income轉(zhuǎn)化為DataFramedf1#查看df1程序運(yùn)行結(jié)果如下:020000001150000021300000Name:收入,dtype:int64<class'pandas.core.series.Series'>【做中學(xué)4.1.8】解析如下:任務(wù)4.1Pandas的基本操作二、DataFrame的簡單運(yùn)算Pandas的數(shù)據(jù)對象在進(jìn)行算術(shù)運(yùn)算時,如果有相同索引,按照相同索引配對進(jìn)行算術(shù)運(yùn)算,如果沒有對應(yīng)的索引,則引入缺失值NaN,這就是數(shù)據(jù)自動對齊的功能。Pandas數(shù)據(jù)結(jié)構(gòu)之間可以使用運(yùn)算符進(jìn)行運(yùn)算,如obj1-obj2、obj1+obj2、obj1*obj2、obj1/obj2,其中obj1和obj2是兩個數(shù)據(jù)結(jié)構(gòu),可以是Series或是DataFrame。【做中學(xué)4.1.9】創(chuàng)建如下圖所示的DataFrame對象,并在此基礎(chǔ)上計(jì)算每家分廠的毛利和毛利率。任務(wù)4.1Pandas的基本操作importnumpyasnp#導(dǎo)入Numpy模塊importpandasaspd#導(dǎo)入Pandas模塊data={'公司':['一分廠','二分廠','三分廠'],'收入':[2000000,1500000,1300000],'成本':[1650000,1350000,1050000]}df=pd.DataFrame(data)df['毛利']=df['收入']-df['成本']df['毛利率']=df['毛利']/df['收入‘]df
#查看df運(yùn)行結(jié)果【做中學(xué)4.1.9】創(chuàng)建如下圖所示的DataFrame對象,并在此基礎(chǔ)上計(jì)算每家分廠的毛利和毛利率?!咀鲋袑W(xué)4.1.9】解析如下:任務(wù)4.1Pandas的基本操作4.1.3
Pandas讀寫外部文件一、讀寫Excel文件在工作中,許多數(shù)據(jù)都保存在Excel中,那么,如何將Excel中的數(shù)據(jù)讀取出來呢?Pandas庫提供了讀取Excel文件格式的read_excel()函數(shù),其語法格式如下:pandas.read_excel(io,sheet_name=0,header=0,names=None,index_col=None,usecols=None,squeeze=False,dtype=None,engine=None,converters=None,true_values=None,false_values=None,skiprows=None,nrows=None,na_values=None,parse_dates=False,date_parser=None,thousands=None,comment=None,skipfooter=0,convert_float=True,**kwds)任務(wù)4.1Pandas的基本操作
read_excel()函數(shù)常用參數(shù)說明參數(shù)說明實(shí)例io接收string,表示文件路徑r'D:\Python\data.xlsx'或者'D:/Python/data.xlsx'r寫在字符串前面,是防止字符轉(zhuǎn)義的一種方式。sheet_name接收string或int,表示導(dǎo)入的sheet頁1.sheet_name=0:默認(rèn)導(dǎo)入第一頁;2.sheet_name=’表名’:直接輸入目標(biāo)sheet表名;3.sheet_name=’Sheet2’:代表第2個sheet,S要大寫。header接收int或sequence,表示導(dǎo)入將某行數(shù)據(jù)作為列名1.header=0:默認(rèn)值,表格的第一行作為列名;2.header=[0,1]:表示前兩行作為列名(多重索引)。names接收sequence,表示自定義列名的列表。如果文件沒有標(biāo)題行,應(yīng)該顯式設(shè)置header=None。例如:names=['公司','收入','成本']注意:一般適用于Excel缺少列名,或者需要重新定義列名的情況,names的長度必須和Excel列長度一致,否則會報錯。任務(wù)4.1Pandas的基本操作
read_excel()函數(shù)常用參數(shù)說明參數(shù)說明實(shí)例index_col指定列用作DataFrame的行索引1.index_col=None:默認(rèn)數(shù)據(jù)不帶行索引號,Pandas自動分配從0開始的索引號;2.index_col=0:以第一列作為行索引;3.index_col=[0,1]:表示將前兩列作為多重索引。usecols指定要使用的列名列表。1.usecols=None:默認(rèn)取所有列;2.usecols=[0,2,3]:以列號代表要取的列;3.usecols=['年’,’月’];以列名代表要取的列。skiprows表示跳過指定行(包括)之前的行開始讀取。skiprows參數(shù)可選類型:1.int類型:int=1代表跳過1行,不是索引1的行;2.int-list類型:[0,1]代表跳過索引為0和1的行。converters對指定列的數(shù)據(jù)進(jìn)行指定函數(shù)的處理。例如:converters={'時間’:str,'資產(chǎn)總額’:float}表示將“時間”列數(shù)據(jù)類型強(qiáng)制規(guī)定為字符串,“資產(chǎn)總額”列強(qiáng)制規(guī)定為浮點(diǎn)型。任務(wù)4.1Pandas的基本操作利用to_excel()函數(shù)可以實(shí)現(xiàn)將DataFrame對象存儲為Excel文件,其語法格式如下:DataFrame.to_excel(excel_writer,sheet_name='Sheet1',na_rep='',float_format=None,columns=None,header=True,index=True,index_label=None,startrow=0,startcol=0,engine=None,merge_cells=True,encoding=None,inf_rep='inf',verbose=True,freeze_panes=None)常用參數(shù)說明:excel_writer:字符串或ExcelWriter對象,表示文件路徑或現(xiàn)有的ExcelWriter;sheet_name:字符串,默認(rèn)“Sheet1”,表示將DataFrame對象存儲為Excel工作簿的名稱;na_rep:字符串,默認(rèn)為‘’,表示缺失數(shù)據(jù)表示方式;float_format:字符串,默認(rèn)None,表示格式化浮點(diǎn)數(shù)的字符串。任務(wù)4.1Pandas的基本操作【做中學(xué)4.1.10】利用Pandas模塊讀入fin_data1.xlsx(位置:E:\file\)中的第一個表格,根據(jù)數(shù)據(jù)表中的數(shù)據(jù)計(jì)算毛利和毛利率,然后將加工過的表格導(dǎo)出一個新的excel文件,存放位置為:E:\file\,命名為fin_data2.xlsx。【做中學(xué)4.1.10】解析如下:導(dǎo)入Pandas模塊和Excel表格數(shù)據(jù),并查看df。其程序如下:importpandasaspd#引入Pandas模塊#讀取Excel文件df=pd.read_excel(r'E:\file\fin_data1.xlsx’,sheet_name=0,converters={'年':str,'月':str})df.head()#默認(rèn)查看df的前5行數(shù)據(jù)STEP01任務(wù)4.1Pandas的基本操作根據(jù)DataFrame對象df計(jì)算毛利和毛利率。其程序如下:df['毛利']=df['營業(yè)收入']-df['營業(yè)成本']df['毛利率']=df['毛利']/df['營業(yè)收入']df.head()#默認(rèn)查看df的前5行數(shù)據(jù)STEP02(3)將df存儲為一個新的Excel文件。其程序如下:df.to_excel(r'E:\file\fin_data2.xlsx',sheet_name='毛利')STEP03任務(wù)4.1Pandas的基本操作二、讀寫CSV文件在Pandas中利用read_csv()函數(shù)讀取CSV文件,其語法格式如下:pandas.read_csv(filepath_or_buffer,sep=',',delimiter=None,header='infer',names=None,index_col=None,usecols=None,dtype=None,…)常用參數(shù)說明:filepath_or_buffer:接收string。表示CSV文件的保存路徑,無默認(rèn)值。sep:接收string,默認(rèn)值為“,”。如果分割符指定錯誤,則在讀取數(shù)據(jù)時,每行數(shù)據(jù)將連成一片。header:接收int或者sequence。表示將某行數(shù)據(jù)作為列名,默認(rèn)值為infer,表示自動識別。names:接收列表。表示列名,默認(rèn)值為None。dtype:接收dict。表示寫入的數(shù)據(jù)類型(列名為key,數(shù)據(jù)類型為values)。任務(wù)4.1Pandas的基本操作CSV文件的存儲可以通過Pandas庫中的to_csv()函數(shù)實(shí)現(xiàn),其語法格式如下:DataFrame.to_csv(path_or_buf=None,sep=',',na_rep='',float_format=None,columns=None,header=True,index=True,index_label=None,mode='w',encoding=None,…)【做中學(xué)4.1.11】從fin_data.csv文件(如下圖所示,位置:E:\file\)讀取數(shù)據(jù)到DataFrame對象中,接著新增營業(yè)凈利率列,最后再存儲為CSV文件(位置:E:\file\),并重命名為fin_data1.csv。任務(wù)4.1Pandas的基本操作【做中學(xué)4.1.11】解析如下:導(dǎo)入Pandas模塊和讀入CSV文件,并查看結(jié)果。程序如下:importpandasaspd#導(dǎo)入Pandas模塊df=pd.read_csv(r'E:\file\fin_data.csv',sep=',',encoding='GBK’)#讀入CSV文件df.head()#查看df前5行數(shù)據(jù)STEP01任務(wù)4.1Pandas的基本操作計(jì)算營業(yè)凈利率。程序如下:df['營業(yè)凈利率']=df['凈利潤']/df['營業(yè)收入']df.head()#查看df前5行數(shù)據(jù)STEP02任務(wù)4.1Pandas的基本操作將df存儲為一個新的CSV文件。程序如下:df.to_csv(r'E:\file\fin_data1.csv',index=False)STEP03任務(wù)4.1Pandas的基本操作案例解析讀入財(cái)務(wù)數(shù)據(jù)表fin_data.xlsx(位置:E\file\)中的資產(chǎn)負(fù)債表項(xiàng)目。程序如下:importpandasaspd#導(dǎo)入Pandas模塊#讀入Excel表格數(shù)據(jù)中的資產(chǎn)負(fù)債表項(xiàng)目,將年、月列轉(zhuǎn)化為字符串df=pd.read_excel(r'E:\file\fin_data.xlsx',sheet_name=0,converters={'年':str,'月':str})df.head()#查看前5行數(shù)據(jù)STEP01任務(wù)4.1Pandas的基本操作查看df相關(guān)屬性。程序如下:print('df的行索引為:')print(df.index)print('df的列索引為:')print(df.columns)print('df的形狀為:',df.shape)print('df的元素個數(shù)為:',df.size)print('df的維數(shù)為:',df.ndim)print('df每列的數(shù)據(jù)類型為:')print(df.dtypes)STEP02df的行索引為:RangeIndex(start=0,stop=24,step=1)df的列索引為:Index(['年','月','平均流動資產(chǎn)','平均非流動資產(chǎn)’,'平均流動負(fù)債','平均非流動負(fù)債','平均所有者權(quán)益’],dtype='object')df的形狀為:(24,7)df的元素個數(shù)為:168df的維數(shù)為:2df每列的數(shù)據(jù)類型為:年object月object平均流動資產(chǎn)float64平均非流動資產(chǎn)float64平均流動負(fù)債float64平均非流動負(fù)債int64平均所有者權(quán)益float64dtype:object任務(wù)4.1Pandas的基本操作采用drop()函數(shù)刪除平均所有者權(quán)益列。程序如下:df.drop(columns='平均所有者權(quán)益',inplace=True)df.head()#查看前5行數(shù)據(jù)STEP03任務(wù)4.1Pandas的基本操作通過計(jì)算新增平均資產(chǎn)合計(jì)、平均負(fù)債合計(jì)列。程序如下:df['平均資產(chǎn)合計(jì)']=df['平均流動資產(chǎn)']+df['平均非流動資產(chǎn)']df['平均負(fù)債合計(jì)']=df['平均流動負(fù)債']+df['平均非流動負(fù)債']df.head()#查看前5行數(shù)據(jù)STEP04任務(wù)4.1Pandas的基本操作任務(wù)實(shí)訓(xùn)請上機(jī)編寫程序?qū)崿F(xiàn)以下要求:讀取財(cái)務(wù)數(shù)據(jù)表fin_data.xlsx(位置:E:\file\)中的利潤表項(xiàng)目到Python,查看其DataFrame對象的屬性,通過計(jì)算的方式增加營業(yè)凈利率列,然后刪除營業(yè)成本列。任務(wù)評價評價類別評價內(nèi)容分值得分綜合得分知識與技能評價(70%)能正確讀入Excel表格20
能正確查看DataFrame對象的屬性20
能正確刪除營業(yè)成本列10
能正確增加營業(yè)凈利率列20
素質(zhì)評價(30%)具有刻苦、勤奮、好問、獨(dú)立思考和細(xì)心檢查的學(xué)習(xí)習(xí)慣10
能與組員精誠合作,能正確面對成功或失敗10
具有一定的自學(xué)能力,分析問題、解決問題能力和創(chuàng)新能力10
任務(wù)4.1Pandas的基本操作引入案例任務(wù)分析知識解析案例解析任務(wù)實(shí)訓(xùn)實(shí)訓(xùn)評價4.2.1直接篩選4.2.2索引器篩選4.2.3條件篩選任務(wù)4.2利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)篩選任務(wù)4.2
利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)篩選任務(wù)4.2利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)篩選引入案例美創(chuàng)科技有限公司財(cái)務(wù)人員小王想要從企業(yè)員工加班工資表.xlsx(位置:E:\file\)中篩選出部門為基本生產(chǎn)車間并且加班費(fèi)高于1600元以上的員工數(shù)據(jù),在Pandas中該如何實(shí)現(xiàn)呢?任務(wù)分析從Excel文件導(dǎo)入到Python中的DataFrame數(shù)據(jù)包含了很多信息,通常需要從原始DataFrame數(shù)據(jù)中篩選一部分信息做分析。根據(jù)不同的情況,可以采用直接篩選、條件篩選和索引器篩選從DataFrame對象中選取數(shù)據(jù)。知識解析在對數(shù)據(jù)做相應(yīng)操作之前,應(yīng)先篩選出所需的數(shù)據(jù)。DataFrame對象的數(shù)據(jù)訪問類似于二維數(shù)組,可以通過值的位置序號獲取,同時由于行、列都關(guān)聯(lián)了索引標(biāo)簽,也可以通過索引來進(jìn)行訪問。DataFrame對象的數(shù)據(jù)篩選可分為直接篩選、條件篩選和索引器篩選三種。任務(wù)4.2利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)篩選4.2.1
直接篩選篩選方式語法格式選取某列DataFrame[col],其中col表示列名。選取多列DataFrame[colList],其中colList表示列名組成的列表。選取多行(切片)或某行DataFrame[index1:index2],其中index表示行自定義索引。說明:采用自定義索引,當(dāng)index1=index2時表示選擇某一行。②DataFrame[num1:num2],其中num表示行原始索引。說明:采用原始索引,當(dāng)數(shù)字連續(xù)時表示選擇某一行。選取多行多列DataFrame[colList][index1:index2]DataFrame[colList][num1:num2]【請注意】(1)采用直接篩選選取連續(xù)多列不能采用切片操作,只能采用列表的形式;(2)在進(jìn)行多行多列直接篩選時,一般要先進(jìn)行列篩選,然后再進(jìn)行行篩選。任務(wù)4.2利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)篩選
【做中學(xué)4.2.1】讀入fin_data.xlsx(位置:E:\file\)中的第一個表格,使用采用篩選方式進(jìn)行數(shù)據(jù)選取?!咀鲋袑W(xué)4.2.1】解析如下:導(dǎo)入Excel表格數(shù)據(jù)并查看。其程序如下:importpandasaspd#導(dǎo)入Pandas模塊#讀取Excel文件df=pd.read_excel(r'E:\file\fin_data.xlsx',sheet_name="資產(chǎn)負(fù)債表項(xiàng)目",
converters={'年':str,'月':str})df.head()#查看前5行數(shù)據(jù)STEP01任務(wù)4.2利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)篩選選取某一列。其程序如下:df['平均流動負(fù)債'].head()STEP02選取多列。其程序如下:df[['年','平均流動資產(chǎn)','平均所有者權(quán)益']].head()STEP03選取多行。其程序如下:df[0:3]#利用行索引選取數(shù)據(jù),區(qū)間前閉后開STEP04選取多行多列。其程序如下:df[['平均流動資產(chǎn)','平均非流動資產(chǎn)']][1:4]STEP05任務(wù)4.2利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)篩選4.2.2索引器篩選loc索引器優(yōu)先使用自定義索引,如果數(shù)據(jù)中沒有自定義索引,則使用原始索引,根據(jù)行索引和列索引進(jìn)行選取,先行后列,也可以只選取行。采用loc索引器形成的篩選方式及語法格式如下表所示。篩選方式語法格式①選取單行DataFrame.loc[index]②選取不連續(xù)多行DataFrame.loc[indexList]③選取連續(xù)多行DataFrame.loc[index1:index2]④選取單列DataFrame.loc[:,col]⑤選取不連續(xù)多列DataFrame.loc[:,colList]⑥選取連續(xù)多列DataFrame.loc[:,col1:col2]⑦選取不連續(xù)多行多列DataFrame.loc[indexList,colList]⑧選取連續(xù)多行多列DataFrame.loc[index1:index2,col1:col2]【請注意】①在進(jìn)行多行多列數(shù)據(jù)篩選時,列表和切片可聯(lián)合使用;②loc索引器不能直接選取列,必須先行后列。任務(wù)4.2利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)篩選
【做中學(xué)4.2.2】讀入fin_data2.xlsx(位置:E:\file\)中的第一個表格,并使用上表中列舉的篩選方式進(jìn)行數(shù)據(jù)選取。
【做中學(xué)4.2.2】解析如下:導(dǎo)入Excel表格數(shù)據(jù)并查看。其程序如下:importpandasaspd#引入Pandas模塊#讀取Excel文件中的第一張表格數(shù)據(jù)df=pd.read_excel(r'E:\file\fin_data.xlsx',sheet_name=0,converters={'年':str,'月':str})df.head()#查看df的前5行數(shù)據(jù)STEP01任務(wù)4.2利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)篩選選取單行。其程序如下:df.loc[2]#選取索引為2的行數(shù)據(jù)STEP02選取不連續(xù)多行。其程序如下:df.loc[[1,3]]#選取行索引為1和3兩行的數(shù)據(jù)STEP03選取連續(xù)多行。其程序如下:df.loc[1:3]#選取連續(xù)3行數(shù)據(jù)STEP04選取單列。其程序如下:df.loc[:,'平均所有者權(quán)益'].head()STEP05任務(wù)4.2利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)篩選選取不連續(xù)多列。其程序如下:df.loc[:,['平均流動資產(chǎn)','平均所有者權(quán)益']].head()STEP06選取連續(xù)多列。其程序如下:df.loc[:,'平均流動負(fù)債':'平均所有者權(quán)益'].head()STEP07選取不連續(xù)多行多列。其程序如下:df.loc[[1,3],['平均流動資產(chǎn)','平均所有者權(quán)益']]STEP08選取連續(xù)多行多列。其程序如下:df.loc[1:3,'平均流動負(fù)債':'平均所有者權(quán)益']STEP09任務(wù)4.2利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)篩選4.2.3條件篩選語法格式舉例說明DataFrame[conditon]根據(jù)列條件選擇行df[df[col]==value]表示選取某列滿足一定條件的行df[(df[col1]==value)&(df[col2]>value)]表示選取多列滿足一定條件的行根據(jù)行索引選擇行df[df.index==’行索引’]表示選擇單行df[(df.index==’行索引’)|df.index==’行索引’)]表示選擇兩行,可使用“|”選擇更多行DataFrame.loc[condition,cols]表示選取滿足條件的行及指定列種類符號及含義比較運(yùn)算符<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、!=(不等于)、==(等于)邏輯運(yùn)算符&(與)、|(或)、~(取反)【請注意】條件表達(dá)式可以使用操作符&、|、~,但是不能使用關(guān)鍵詞and、or、not。任務(wù)4.2利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)篩選
【做中學(xué)4.2.3】讀入fin_data.xlsx(位置:E:\file\)中的第一個表格,并使用上表中列舉的篩選方式進(jìn)行數(shù)據(jù)選取。導(dǎo)入Excel表格數(shù)據(jù)并查看前5行數(shù)據(jù)。其程序如下:importpandasaspd#引入Pandas模塊#讀取Excel文件中的第一張表格數(shù)據(jù)df=pd.read_excel(r'E:\file\fin_data.xlsx',sheet_name=0,converters={'年':str,'月':str})df.head()#查看前5行數(shù)據(jù)STEP01【做中學(xué)4.2.3】解析如下:任務(wù)4.2利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)篩選采用DataFrame[conditon]方式根據(jù)某一列滿足的一定條件選取行數(shù)據(jù)的程序如下:df[df['年']=='2023'] #選取年列的列值為2023的數(shù)據(jù)STEP02任務(wù)4.2利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)篩選采用DataFrame[conditon]方式,根據(jù)多列滿足一定條件選取行數(shù)據(jù)的程序如下:df[(df['年']=='2023')&(df['平均所有者權(quán)益']<2000000)]STEP03采用DataFrame.loc[condition,cols]方式選取數(shù)據(jù)的程序如下:df.loc[df['平均所有者權(quán)益']<1900000,['年','月','平均所有者權(quán)益']]STEP04任務(wù)4.2利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)篩選案例解析讀入企業(yè)員工加班工資表.xlsx(位置:E:\file\)。程序如下:importpandasaspd#導(dǎo)入Pandas模塊df=pd.read_excel(r'E:\file\企業(yè)員工加班工資表.xlsx')df.head()#查看前5行數(shù)據(jù)STEP01任務(wù)4.2利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)篩選篩選出部門為基本生產(chǎn)車間并且加班工資高于1600元以上的數(shù)據(jù)。程序如下:df[(df['部門']=='基本生產(chǎn)車間')&(df['加班費(fèi)']>1600)]STEP02任務(wù)4.2利用Pandas進(jìn)行財(cái)務(wù)數(shù)據(jù)篩選任務(wù)實(shí)訓(xùn)
請上機(jī)編寫程序?qū)崿F(xiàn)以下要求:讀取企業(yè)員工加班工資表.xlsx(位置:E:\file\),使用條件篩選的兩種方式從企業(yè)員工加班工資表中篩選出部門為輔助生產(chǎn)車間并且加班費(fèi)高于1000元以上的數(shù)據(jù)。實(shí)訓(xùn)評價評價類別評價內(nèi)容分值得分綜合得分知識與技能評價(70%)能正確讀入Excel表格10
能利用條件篩選獲得數(shù)據(jù)30
能利用索引器篩選獲得數(shù)據(jù)30
素質(zhì)評價(30%)具有刻苦、勤奮、好問、獨(dú)立思考和細(xì)心檢查的學(xué)習(xí)習(xí)慣10
能與組員精誠合作,能正確面對成功或失敗10
具有一定的自學(xué)能力,分析問題、解決問題能力和創(chuàng)新能力10
引入案例任務(wù)分析知識解析案例解析任務(wù)實(shí)訓(xùn)實(shí)訓(xùn)評價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)科技有限公司決定對銷售人員的銷售業(yè)績進(jìn)行考核和獎勵,根據(jù)銷售額是否超過45萬,將銷售人員的銷售業(yè)績定為達(dá)標(biāo)和未達(dá)標(biāo)。如果未達(dá)標(biāo),銷售獎金為0;如果達(dá)標(biāo),銷售額低于50萬的銷售人員的銷售獎金為銷售額的1%,銷售額高于等于50萬的銷售人員的銷售獎金為銷售額的1.5%。財(cái)務(wù)人員小王如何在Pandas模塊中實(shí)現(xiàn)呢?任務(wù)分析本任務(wù)利用Pandas模塊中的map()函數(shù)、apply()函數(shù)、applymap()函數(shù)實(shí)現(xiàn)對DataFrame對象的逐行、逐列或逐元素的操作,實(shí)現(xiàn)了對數(shù)據(jù)的靈活處理,也提高了程序的運(yùn)行速度。任務(wù)4.3利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理任務(wù)4.3利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理知識解析在日常的數(shù)據(jù)處理中,經(jīng)常會對一個DataFrame進(jìn)行逐行、逐列或逐元素的操作,可能首先想到的是用循環(huán)結(jié)構(gòu)來處理這類問題,但是這樣做顯然也失去了使用Pandas數(shù)據(jù)結(jié)構(gòu)的優(yōu)勢,并且也會使你的程序運(yùn)行性能速度大大降低。而使用Pandas中的map()、apply()和applymap()函數(shù)無需通過循環(huán)就可以滿足數(shù)據(jù)處理需求。4.3.1map()函數(shù)map()函數(shù)可以用于Series對象或DataFrame對象的一列,接收函數(shù)或字典對象作為參數(shù),對指定序列逐一映射,返回經(jīng)過函數(shù)或字典映射處理后的值。其語法格式如下:Series.map(functionordict,na_action=None)map()函數(shù)參數(shù)說明:functionordict:可接收lambda表達(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\)中的“利潤表項(xiàng)目”工作表,據(jù)此計(jì)算出凈利潤率,然后進(jìn)行以下操作:(1)根據(jù)凈利率進(jìn)行業(yè)績評價,使用map()函數(shù)將凈利率超過20%的月份標(biāo)記為達(dá)標(biāo),否則不達(dá)標(biāo);(2)根據(jù)業(yè)績評價結(jié)果確定是否發(fā)放獎金,業(yè)績達(dá)標(biāo)則發(fā)放,否則不發(fā)放。讀入Excel表格并計(jì)算凈利潤率。程序如下:importpandasaspd#引入pandas模塊#讀取“利潤表項(xiàng)目”工作表df=pd.read_excel(r'E:\file\fin_data.xlsx',sheet_name=1,converters={'年':str,'月':str})df['凈利率']=df['凈利潤']/df['營業(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è)績評價。程序如下:df['業(yè)績評價']=df['凈利率'].map(lambdax:'達(dá)標(biāo)'ifx>0.2else'不達(dá)標(biāo)')df.head()#查看df前5行數(shù)據(jù)STEP02【請注意】map()函數(shù)的function參數(shù)不僅可以接收lambda表達(dá)式,還可以接收自定義函數(shù)(def)或python內(nèi)置函數(shù),使用函數(shù)名作為map()函數(shù)的參數(shù)。任務(wù)4.3
利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理
從輸出結(jié)果來看,新增一列業(yè)績評價,其值為達(dá)標(biāo)或不達(dá)標(biāo),其原理是將凈利潤率列每個元素逐一傳入lambda()函數(shù)得到返回值,如下圖所示。任務(wù)4.3利用Pandas高階函數(shù)進(jìn)行數(shù)據(jù)處理使用Series.map(dict)的形式確定是否發(fā)放獎金。程序如下:df['是否發(fā)放獎金']=df['業(yè)績評價'].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é)果來看,新增一列是否發(fā)放獎金,其值為發(fā)放或不發(fā)放,其原理是將業(yè)績評價列每個元素逐一傳入字典作為鍵,返回對應(yīng)的值,如下圖所示。不論是利用字典參數(shù)還是函數(shù)進(jìn)行映射,map()函數(shù)都是把對應(yīng)的數(shù)據(jù)逐個當(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ù)語法格式如下:Series.apply(func,convert_dtype=True,args=(),**kwargs)Series.apply()函數(shù)參數(shù)說明參數(shù)說明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ù)。單個元素需在括號內(nèi)加逗號。**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ù)對象為基礎(chǔ),現(xiàn)需要調(diào)整營業(yè)收入金額,而具體調(diào)整的金額未知,請使用Series.apply()函數(shù)實(shí)現(xiàn)營業(yè)收入的調(diào)整。【做中學(xué)4.3.2】解析如下:因需要對營業(yè)收入進(jìn)行調(diào)整(加上或減去一個值),由于這個加上或減去的值未知,可使用自定義函數(shù)并需要多加一個參數(shù),此時map()函數(shù)是不能實(shí)現(xiàn)的(
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貨物運(yùn)輸合同(水路)
- 醫(yī)療行業(yè)人才引進(jìn)合同
- 房地產(chǎn)開發(fā)商與購房者合同大全
- 勞動用工安全責(zé)任合同模板:應(yīng)對與處理
- 地區(qū)授權(quán)代理合同書
- 基礎(chǔ)設(shè)施建設(shè)項(xiàng)目土地征用合同
- 房地產(chǎn) -鏈家地產(chǎn) 二手房業(yè)務(wù)知識與經(jīng)驗(yàn)介紹
- 安全責(zé)任的落實(shí)強(qiáng)化企業(yè)安全主體責(zé)任考核試卷
- 攝影器材行業(yè)知識產(chǎn)權(quán)保護(hù)與合規(guī)經(jīng)營策略研究考核試卷
- 數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)考核試卷
- 航空航天標(biāo)準(zhǔn)與認(rèn)證互認(rèn)
- 心理課教案自我認(rèn)知與情緒管理
- 民用無人機(jī)操控員執(zhí)照(CAAC)考試復(fù)習(xí)重點(diǎn)題庫500題(含答案)
- GB/T 6553-2024嚴(yán)酷環(huán)境條件下使用的電氣絕緣材料評定耐電痕化和蝕損的試驗(yàn)方法
- 中職旅游專業(yè)《中國旅游地理》說課稿
- 第15課 列強(qiáng)入侵與中國人民的反抗斗爭【課件】-中職高一上學(xué)期高教版
- 中國海關(guān)科學(xué)技術(shù)研究中心招聘筆試真題2022
- 結(jié)構(gòu)實(shí)驗(yàn)技術(shù):地震模擬振動臺試驗(yàn)
- 《鄧稼先》省公開課一等獎全國示范課微課金獎?wù)n件
- GJB9001C-2017管理手冊、程序文件及表格匯編
- 核心素養(yǎng)目標(biāo)新課標(biāo)北師大版小學(xué)數(shù)學(xué)三年級下冊全冊教案
評論
0/150
提交評論