大數據技術在財務中的應用Python版 課件 項目4 利用Pandas進行財務數據預處理_第1頁
大數據技術在財務中的應用Python版 課件 項目4 利用Pandas進行財務數據預處理_第2頁
大數據技術在財務中的應用Python版 課件 項目4 利用Pandas進行財務數據預處理_第3頁
大數據技術在財務中的應用Python版 課件 項目4 利用Pandas進行財務數據預處理_第4頁
大數據技術在財務中的應用Python版 課件 項目4 利用Pandas進行財務數據預處理_第5頁
已閱讀5頁,還剩125頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

利用Pandas進行財務數據預處理項目四Pandas的基本操作任務4.1利用Pandas進行財務數據篩選任務4.2利用Pandas高階函數進行數據處理任務4.3利用Pandas進行財務數據合并任務4.4目錄利用Pandas進行財務數據清洗任務4.5引入案例任務分析知識解析案例解析任務實訓實訓評價4.1.1Pandas數據結構4.1.2DataFrame創建方法與屬性4.1.3DataFrame的基本操作4.1.4DataFrame的簡單運算4.1.5Pandas讀寫外部文件任務4.1Pandas的基本操作任務4.1Pandas的基本操作引入案例在Excel文件中,數據量一旦超過10000行,利用Excel處理起來就會非常慢。于是,美創科技有限公司財務人員小王想把財務數據表fin_data.xlsx(E:\file\)導入到Python中,利用Pandas模塊可以查看表格的基本屬性,進行行、列的新增、刪除操作或簡單計算。這樣的操作在Pandas模塊中如何實現呢?任務分析要想把外部財務數據導入到Python中,就要用到Pandas讀寫外部文件的函數,讀進來之后默認存儲為DataFrame對象,可利用相關函數查看其基本屬性,然后進行新增或刪除等基本操作,還可以進行簡單的算術運算。知識解析Pandas是Python的第三方庫,是數據分析工作中最常用并且最重的一個數據分析工具包,可以處理包含不同類型數據的復雜表格和時間序列。它易于使用、開源,并且允許處理大量數據,能夠快速高效的處理缺失數據,對數據進行切片、聚合、整理和匯總統計等。Pandas具有許多與SQL或Excel相同的功能,并且可以讀取各種外部文件,比如CSV文件、文本文件、MicrosoftExcel文件、SQL數據庫文件等,允許將不同來源的數據集轉換為DataFrame對象。在使用Pandas進行數據處理時,首先要導入Pandas模塊,其語法格式如下:importpandasaspd執行這條語句表示引入Pandas模塊,并為pandas模塊起別名pd,這個pd是一個約定成俗的名字。在以后的編程語句中,pandas與pd等同。Pandas包含Series和DataFrame兩種數據類型,其中DataFrame數據類型就相當于Excel表格數據的行和列,而Series數據類型就相當于Excel表中的一列或一行。Series是一種基于NumPy數組的一維數據結構,如右圖所示,由一組數據(各種NumPy類型)及與之相關的數據索引(index)組成。類似于Python列表,每個元素帶有一個自動索引(索引從0開始,也稱為原始索引),除自動索引外,還可以自定義索引,自定義索引可以是數字或字符串。【請注意】Series中的自定義索引值是可以重復的。4.1.1Pandas數據結構一、Series數據結構任務4.1Pandas的基本操作1.Series對象的創建Series類型可由Python列表、字典、NumPy數組等數據類型創建。利用列表創建Series時,列表的元素就是Series的值,而Series的索引可以通過index參數創建,并且索引的個數與值的個數要保持一致。利用一維數組創建Series時,一維數組的值就是Series的值,而Series的索引可以通過index參數創建,并且索引的個數與值的個數要保持一致。利用字典創建Series時,字典的鍵key就是Series的索引index,字典的值value就是Series的值。任務4.1Pandas的基本操作【做中學4.1.1】編寫程序,分別利用列表、一維數組和字典創建Series。利用列表創建的Series為:0庫存現金1銀行存款2應收賬款dtype:object利用數組創建的Series為:1001庫存現金1002銀行存款1122應收賬款dtype:object利用字典創建的Series為:1001庫存現金1002銀行存款1122應收賬款dtype:objectimportnumpyasnp#導入Numpy模塊importpandasaspd#導入Pandas模塊#利用列表創建Series,先創建列表list1=['庫存現金','銀行存款','應收賬款']#不指定索引,默認為從0開始的原始索引ser1=pd.Series(list1)print('利用列表創建的Series為:\n',ser1)#利用數組創建Series,先創建數組arr=np.array(['庫存現金','銀行存款','應收賬款'])#用index參數指定索引ser2=pd.Series(arr,index=['1001','1002','1122'])print('利用數組創建的Series為:\n',ser2)#利用字典創建Series,先創建字典dict1={'1001':'庫存現金','1002':'銀行存款','1122':'應收賬款'}ser3=pd.Series(dict1)print('利用字典創建的Series為:\n',ser3)【做中學4.1.1】程序如下:任務4.1Pandas的基本操作2.Series對象的數據查詢

Series對象的數據查詢方式類似一維ndarray對象,可以通過值的位置序號獲取,同時由于每個值都關聯了索引標簽,也可以通過索引來查詢。ser=pd.Series([4,7,-5,3],index=['d','b','a','c'])查詢方式語法格式說明舉例利用位置查詢Series[下標值]選取單個值輸入程序:ser[2]輸出結果:-5Series[下標值列表]選取多個值輸入程序:ser[[1,3]]輸出結果:b7

c3dtype:int64Series[下標值1:下標值2]切片操作輸入程序:ser[1:3]輸出結果:b7

a-5dtype:int64任務4.1Pandas的基本操作查詢方式語法格式說明舉例利用索引查詢Series[索引]選取單個值輸入程序:ser['a']輸出結果:-5Series[索引列表]選取多個值輸入程序:ser[['d','a']]輸出結果:d4a-5dtype:int64Series[索引1:索引2]切片操作輸入程序:ser['d':'a’]輸出結果:d4

b7a-5dtype:int64

ser=pd.Series([4,7,-5,3],index=['d','b','a','c'])任務4.1Pandas的基本操作查詢方式語法格式說明舉例利用索引器loc查詢Series.loc[索引]選取單個值輸入程序:ser.loc['a']輸出結果:-5Series.loc[索引列表]選取多個值輸入程序:ser.loc[['d','a']]輸出結果:d4

a-5dtype:int64Series.loc[索引1:索引2]切片操作輸入程序:ser.loc['d':'a']輸出結果:d4b7a-5dtype:int64條件查詢Series[條件表達式]選取滿足條件的值輸入程序:ser[ser>0]輸出結果:d4b7c3dtype:int64ser=pd.Series([4,7,-5,3],index=['d','b','a','c'])任務4.1Pandas的基本操作3.Series對象的修改、增加及刪除操作說明舉例修改Series對象的修改是建立在查詢的基礎上,通過查詢操作選取到單個值或多個值,然后通過賦值操作進行修改。輸入程序:ser[2]=5ser輸出結果:d4

b7a5c3dtype:int64刪除Series對象的刪除操作通過drop()函數實現。輸入程序:ser3=ser.drop(['d','a’])ser3輸出結果:b7

c3

dtype:int64ser=pd.Series([4,7,-5,3],index=['d','b','a','c'])任務4.1Pandas的基本操作操作說明舉例增加Series對象不能直接添加新數據,需要將新數據單獨創建為一個新的Series對象,然后用append()添加到原有的Series對象中。輸入程序:ser1=pd.Series([-6,6])

ser2=ser.append(ser1)

ser2輸出結果:d4b7a5c30-616dtype:int64ser=pd.Series([4,7,-5,3],index=['d','b','a','c'])任務4.1Pandas的基本操作DataFrame數據結構如下圖所示,與Series類似,也是由索引和數據構成,不同的是,DataFrame的索引不僅有行索引,還有列索引。行索引用index表示,列索引用columns表示,如果沒有傳入行索引或列索引,DataFrame會默認自動創建一個從0開始的整數索引,這種索引稱為自動索引或原始索引。行索引位于最左邊一列,而列索引位于最上面一行。二、DataFrame數據結構任務4.1Pandas的基本操作4.1.2DataFrame創建方法與屬性一、DataFrame的創建方法創建DataFrame對象的一般語法格式如下:

pd.DataFrame(data,columns=[序列],index=[序列])在創建DataFrame對象時,行索引和列索引可以通過columns和index參數指定,若沒有明確指出,則會被設置為默認值,默認為自動從0開始的連續數字。而其中的data主要有兩類數據類型創建:(1)使用字典類創建,如:①數組、列表、元組構成的字典;②Series構造的字典;③字典構造的字典。(2)使用列表類創建,如:①二維數組構成的列表;②字典構造的列表;③Series構成的列表。任務4.1Pandas的基本操作創建方法程序實例由一維數組組成的字典創建data={'公司':np.array(['一分廠','二分廠','三分廠']),'收入':np.array([2000000,1500000,1300000]),'成本':np.array([1650000,1350000,1050000])}df=pd.DataFrame(data)由一維列表組成的字典創建data={'公司':['一分廠','二分廠','三分廠'],'收入':[2000000,1500000,1300000],'成本':[1650000,1350000,1050000]}df=pd.DataFrame(data)由Series組成的字典創建data={'公司':pd.Series(['一分廠','二分廠','三分廠']),'收入':pd.Series([2000000,1500000,1300000]),'成本':pd.Series([1650000,1350000,1050000])}df=pd.DataFrame(data)【做中學4.1.2】擬創建如下圖所示的DataFrame對象,可以采用的創建方法如表所示。任務4.1Pandas的基本操作【做中學4.1.2】擬創建如下圖所示的DataFrame對象,可以采用的創建方法如下表所示。創建方法程序實例由二維數組創建data=np.array([['一分廠',2000000,1650000],['二分廠',1500000,1350000],['三分廠',1300000,1050000]])df=pd.DataFrame(data,columns=['公司','收入','成本'])由嵌套列表創建data=[['一分廠',2000000,1650000],['二分廠',1500000,1350000],['三分廠',1300000,1050000]]df=pd.DataFrame(data,columns=['公司','收入','成本'])由字典組成的列表創建data=[{'公司':'一分廠','收入':2000000,'成本':1650000},{'公司':'二分廠','收入':1500000,'成本':1350000},{'公司':'三分廠','收入':1300000,'成本':1050000}]df=pd.DataFrame(data)由字典組成的字典創建data={'公司':{0:'一分廠',1:'二分廠',2:'三分廠'},'收入':{0:2000000,1:1500000,2:1300000},'成本':{0:1650000,1:1350000,2:1050000}}df=pd.DataFrame(data)任務4.1Pandas的基本操作二、DataFrame的屬性DataFrame的屬性包括形狀(行數與列數)、元素個數、列索引、行索引等,以【做中學4.1.2】中創建的DataFrame對象為例,查看其屬性的操作如下表所示。屬性說明實例結果indexDataFrame的行索引df.indexInt64Index([0,1,2],dtype='int64')columnsDataFrame的列索引df.columnsIndex(['公司','收入','成本'],dtype='object')valuesDataFrame的Numpy原生二維數組數據df.valuesarray([['一分廠',2000000,1650000],['二分廠',1500000,1350000],

['三分廠',1300000,1050000]],dtype=object)shapeDataFrame的形狀df.shape(3,3)sizeDataFrame的元素個數df.size9ndimDataFrame的維數df.ndim2dtypesDataFrame的數據類型df.dtypes公司

object收入

int64成本

int64dtype:object任務4.1Pandas的基本操作4.1.3DataFrame的基本操作DataFrame作為一種二維表的數據結構,其基本操作包括索引操作和數據內容的操作。索引操作包括重生索引、重設索引、重命名索引、還原索引和軸向變換;數據內容的操作包括增加和刪除操作,如增刪行和列,在實際應用中新增列的情況比較多。一、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聯合使用;②index:可選,表示要使用的新的行索引;③columns:可選,表示要使用的新的列索引;④method:用于在重生索引的DataFrame中填充的方法;⑤fill_value:默認為np.NaN,用于缺失值的填充;⑥limit:int,默認None,向前或向后填充的連續元素的最大數量。任務4.1Pandas的基本操作索引操作說明語法格式還原索引將DataFrame對象的行索引還原為原始索引DataFrame.reset_index(level=None,drop=False,inplace=False,col_level=0,col_fill='')其中:①level:接收int、str、tuple或list,表示僅從索引中刪除給定級別。默認情況下移除所有級別。②drop:表示索引列是否還原為普通列,否則會丟失,默認值為False;③inplace:是否在原DataFrame上修改,默認為False;④col_level:int或str,默認值為0,如果列有多個級別,則確定將標簽插入到哪個級別。默認情況下,它將插入到第一級;⑤col_fill:對象,默認‘’,如果列有多個級別,則確定其他級別的命名方式。如果沒有,則重復索引名。重設索引將DataFrame行索引修改為DataFrame中的某一列或幾列DataFrame.set_index(keys,drop=True,append=False,inplace=False,verify_integrity=False)其中:①keys:表示要設置為索引的列名(如有多個應放在一個列表里);②drop:將設置為索引的列刪除,默認為True;③append:是否將新的索引追加到原索引后(即是否保留原索引),默認為False;④inplace:是否在原DataFrame上修改,默認為False;⑤verify_integrity:是否檢查索引有無重復,默認為False。任務4.1Pandas的基本操作索引操作說明語法格式重命名索引用來修改Dataframe的行索引index和列名DataFrame.rename(mapper=None,index=None,columns=None,axis=None,copy=True,inplace=False,level=None)其中:①mapper:映射器,類似于字典,應用于特定軸標簽,與axis聯合使用;②index:更改行索引名稱;③columns:更改列名;④axis:int或字符串值,0表示行,1表示列,默認為0,確定mapper所針對的軸;⑤inplace:是否在原DataFrame上修改,默認為False。軸向變換列索引轉化為行索引DataFrame.stack(level=-1,dropna=Ture)其中:①level:表示要轉換的索引軸,取值可以為int、str、list,默認取值為-1,表示轉換最內層的列索引,轉換后為最內層的行索引;②dropna:表示是否刪除所有值均缺失的行,默認為True。行索引轉化為列索引DataFrame.unstack(level=-1,fill_value=None)其中:①level:表示要轉換的索引軸,取值可以為int、str、list,默認取值為-1,表示轉換最內層的行索引,轉換后為最內層的列索引;②fill_value:取值可以為int、str、list,表示缺失值替換方式。任務4.1Pandas的基本操作【做中學4.1.3】編寫程序實現下圖所示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()【做中學4.1.3】程序如下:任務4.1Pandas的基本操作二、新增列數據方法語法格式利用直接賦值DataFrame[new_col]=value,其中:new_col表示新增的列名。利用公式計算DataFrame[new_col]=DataFrame[col]+DataFrame[col]說明:不限兩列間的加法運算,也可以進行減法、除法和乘法運算,當然也可以進行多列間的簡單算術運算。其中col表示已經存在的列名。利用insert()函數插入新列DataFrame.insert(loc,column,value,allow_duplicates=False)參數說明:①loc:接收int,表示插入列的位置,插入第一列為loc=O;②column:表示插入列的列名;③value:表示插入的值,可以為數值、Series、數組等;④allow_duplicates:表示是否允許列名重復,默認False,如果列名已經存在則報錯,設置為True表示允許列名重復。任務4.1Pandas的基本操作【做中學4.1.4】編寫程序,要求采用三種不同的方法實現下圖中DataFrame對象列的增加。importnumpyasnpimportpandasaspddata={'公司':['一分廠','二分廠','三分廠’],'收入':[2000000,1500000,1300000],'成本':[1650000,1350000,1050000]}df=pd.DataFrame(data)df['時間']='2021年'df['毛利']=df['收入']-df['成本’]df.insert(loc=1,column='地點’,value=['中國','美國','印度'])【做中學4.1.4】程序如下:任務4.1Pandas的基本操作三、刪除列數據刪除方法語法格式說明deldelDataFrame[col]無返回值,改變原值。pop()DataFrame.pop(col)返回被刪除的值,改變原值。drop()DataFrame.drop(labels,axis=1)DataFrame.drop(columns=[col1,clol2,…])返回刪除后的剩余值,不改變原值,如果要修改原值,需增加參數inplace=True即可。任務4.1Pandas的基本操作【做中學4.1.5】編寫程序以下操作:對【做中學4.1.4】最終生成的DataFrame對象df使用del、pop()、drop()方法進行刪除操作,如下圖所示。deldf['時間']#刪除時間列df.pop('地點')#刪除地點列df.drop("毛利",axis=1,inplace=True)#刪除毛利列【做中學4.1.5】程序如下:任務4.1Pandas的基本操作四、行數據的增加和刪除行的增加可以使用索引器loc方法,然后利用列表和字典進行賦值,也可以用其他方法。行的刪除仍然可以使用drop方法,其語法格式有如下兩種:DataFrame.drop(index=[index1,index2,…])DataFrame.drop(label,axis=0)【做中學4.1.6】編寫程序實現下圖中DataFrame對象行的增加和刪除。importnumpyasnpimportpandasaspddata={'公司':['一分廠','二分廠','三分廠'],'收入':[2000000,1500000,1300000],'成本':[1650000,1350000,1050000]}df=pd.DataFrame(data)df.loc[3]=['四分廠',1850000,150000]df.drop(1,axis=0,inplace=True)【做中學4.1.6】程序如下:任務4.1Pandas的基本操作四、DataFrame的轉置及數據類型轉換利用Pandas將DataFrame對象的行和列相互調換,可以使用矩陣轉置操作實現,其語法格式為:DataFame.T在Pandas中可以使用astype()進行數據類型的強制轉換。astype()的一般用法格式如下:DataFrame[column].astype(dtype_new)【做中學4.1.7】解析如下:(1)創建DateFrame對象。程序如下:importpandasaspd#引入Pandas模塊importnumpyasnp#引入Numpy模塊data={"期初余額":[85000,97000,116000],"期末余額":[70000.15,50000.75,126000.55]}df=pd.DataFrame(data,index=["應收賬款","應付賬款","實收資本"])df#查看df【做中學4.1.7】創建一個DataFame對象,首先通過轉置操作實現行列的調換,然后進行數據類型的轉換。任務4.1Pandas的基本操作(2)對df進行轉置操作。程序如下:df.T#轉置操作,T為轉置運算符(3)將df中期末余額列數據轉化為整數。程序如下:df['期末余額']=df['期末余額'].astype('int’)df#查看df運行結果運行結果任務4.1Pandas的基本操作4.1.3

DataFrame的簡單運算一、DataFrame與Series之間的轉化【做中學4.1.8】編寫程序將DataFrame中的一列轉化成Series,然后再將該Series轉化成DataFrame。importnumpyasnp#導入Numpy模塊importpandasaspd#導入Pandas模塊data={'公司':['一分廠','二分廠','三分廠'],'收入':[2000000,1500000,1300000],'成本':[1650000,1350000,1050000]}df=pd.DataFrame(data)income=df['收入']#取收入列轉化為Seriesprint(income)#打印incomeprint(type(income))#查看income的數據類型df1=pd.DataFrame(income)#將income轉化為DataFramedf1#查看df1程序運行結果如下:020000001150000021300000Name:收入,dtype:int64<class'pandas.core.series.Series'>【做中學4.1.8】解析如下:任務4.1Pandas的基本操作二、DataFrame的簡單運算Pandas的數據對象在進行算術運算時,如果有相同索引,按照相同索引配對進行算術運算,如果沒有對應的索引,則引入缺失值NaN,這就是數據自動對齊的功能。Pandas數據結構之間可以使用運算符進行運算,如obj1-obj2、obj1+obj2、obj1*obj2、obj1/obj2,其中obj1和obj2是兩個數據結構,可以是Series或是DataFrame。【做中學4.1.9】創建如下圖所示的DataFrame對象,并在此基礎上計算每家分廠的毛利和毛利率。任務4.1Pandas的基本操作importnumpyasnp#導入Numpy模塊importpandasaspd#導入Pandas模塊data={'公司':['一分廠','二分廠','三分廠'],'收入':[2000000,1500000,1300000],'成本':[1650000,1350000,1050000]}df=pd.DataFrame(data)df['毛利']=df['收入']-df['成本']df['毛利率']=df['毛利']/df['收入‘]df

#查看df運行結果【做中學4.1.9】創建如下圖所示的DataFrame對象,并在此基礎上計算每家分廠的毛利和毛利率。【做中學4.1.9】解析如下:任務4.1Pandas的基本操作4.1.3

Pandas讀寫外部文件一、讀寫Excel文件在工作中,許多數據都保存在Excel中,那么,如何將Excel中的數據讀取出來呢?Pandas庫提供了讀取Excel文件格式的read_excel()函數,其語法格式如下: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)任務4.1Pandas的基本操作

read_excel()函數常用參數說明參數說明實例io接收string,表示文件路徑r'D:\Python\data.xlsx'或者'D:/Python/data.xlsx'r寫在字符串前面,是防止字符轉義的一種方式。sheet_name接收string或int,表示導入的sheet頁1.sheet_name=0:默認導入第一頁;2.sheet_name=’表名’:直接輸入目標sheet表名;3.sheet_name=’Sheet2’:代表第2個sheet,S要大寫。header接收int或sequence,表示導入將某行數據作為列名1.header=0:默認值,表格的第一行作為列名;2.header=[0,1]:表示前兩行作為列名(多重索引)。names接收sequence,表示自定義列名的列表。如果文件沒有標題行,應該顯式設置header=None。例如:names=['公司','收入','成本']注意:一般適用于Excel缺少列名,或者需要重新定義列名的情況,names的長度必須和Excel列長度一致,否則會報錯。任務4.1Pandas的基本操作

read_excel()函數常用參數說明參數說明實例index_col指定列用作DataFrame的行索引1.index_col=None:默認數據不帶行索引號,Pandas自動分配從0開始的索引號;2.index_col=0:以第一列作為行索引;3.index_col=[0,1]:表示將前兩列作為多重索引。usecols指定要使用的列名列表。1.usecols=None:默認取所有列;2.usecols=[0,2,3]:以列號代表要取的列;3.usecols=['年’,’月’];以列名代表要取的列。skiprows表示跳過指定行(包括)之前的行開始讀取。skiprows參數可選類型:1.int類型:int=1代表跳過1行,不是索引1的行;2.int-list類型:[0,1]代表跳過索引為0和1的行。converters對指定列的數據進行指定函數的處理。例如:converters={'時間’:str,'資產總額’:float}表示將“時間”列數據類型強制規定為字符串,“資產總額”列強制規定為浮點型。任務4.1Pandas的基本操作利用to_excel()函數可以實現將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)常用參數說明:excel_writer:字符串或ExcelWriter對象,表示文件路徑或現有的ExcelWriter;sheet_name:字符串,默認“Sheet1”,表示將DataFrame對象存儲為Excel工作簿的名稱;na_rep:字符串,默認為‘’,表示缺失數據表示方式;float_format:字符串,默認None,表示格式化浮點數的字符串。任務4.1Pandas的基本操作【做中學4.1.10】利用Pandas模塊讀入fin_data1.xlsx(位置:E:\file\)中的第一個表格,根據數據表中的數據計算毛利和毛利率,然后將加工過的表格導出一個新的excel文件,存放位置為:E:\file\,命名為fin_data2.xlsx。【做中學4.1.10】解析如下:導入Pandas模塊和Excel表格數據,并查看df。其程序如下:importpandasaspd#引入Pandas模塊#讀取Excel文件df=pd.read_excel(r'E:\file\fin_data1.xlsx’,sheet_name=0,converters={'年':str,'月':str})df.head()#默認查看df的前5行數據STEP01任務4.1Pandas的基本操作根據DataFrame對象df計算毛利和毛利率。其程序如下:df['毛利']=df['營業收入']-df['營業成本']df['毛利率']=df['毛利']/df['營業收入']df.head()#默認查看df的前5行數據STEP02(3)將df存儲為一個新的Excel文件。其程序如下:df.to_excel(r'E:\file\fin_data2.xlsx',sheet_name='毛利')STEP03任務4.1Pandas的基本操作二、讀寫CSV文件在Pandas中利用read_csv()函數讀取CSV文件,其語法格式如下:pandas.read_csv(filepath_or_buffer,sep=',',delimiter=None,header='infer',names=None,index_col=None,usecols=None,dtype=None,…)常用參數說明:filepath_or_buffer:接收string。表示CSV文件的保存路徑,無默認值。sep:接收string,默認值為“,”。如果分割符指定錯誤,則在讀取數據時,每行數據將連成一片。header:接收int或者sequence。表示將某行數據作為列名,默認值為infer,表示自動識別。names:接收列表。表示列名,默認值為None。dtype:接收dict。表示寫入的數據類型(列名為key,數據類型為values)。任務4.1Pandas的基本操作CSV文件的存儲可以通過Pandas庫中的to_csv()函數實現,其語法格式如下: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,…)【做中學4.1.11】從fin_data.csv文件(如下圖所示,位置:E:\file\)讀取數據到DataFrame對象中,接著新增營業凈利率列,最后再存儲為CSV文件(位置:E:\file\),并重命名為fin_data1.csv。任務4.1Pandas的基本操作【做中學4.1.11】解析如下:導入Pandas模塊和讀入CSV文件,并查看結果。程序如下:importpandasaspd#導入Pandas模塊df=pd.read_csv(r'E:\file\fin_data.csv',sep=',',encoding='GBK’)#讀入CSV文件df.head()#查看df前5行數據STEP01任務4.1Pandas的基本操作計算營業凈利率。程序如下:df['營業凈利率']=df['凈利潤']/df['營業收入']df.head()#查看df前5行數據STEP02任務4.1Pandas的基本操作將df存儲為一個新的CSV文件。程序如下:df.to_csv(r'E:\file\fin_data1.csv',index=False)STEP03任務4.1Pandas的基本操作案例解析讀入財務數據表fin_data.xlsx(位置:E\file\)中的資產負債表項目。程序如下:importpandasaspd#導入Pandas模塊#讀入Excel表格數據中的資產負債表項目,將年、月列轉化為字符串df=pd.read_excel(r'E:\file\fin_data.xlsx',sheet_name=0,converters={'年':str,'月':str})df.head()#查看前5行數據STEP01任務4.1Pandas的基本操作查看df相關屬性。程序如下:print('df的行索引為:')print(df.index)print('df的列索引為:')print(df.columns)print('df的形狀為:',df.shape)print('df的元素個數為:',df.size)print('df的維數為:',df.ndim)print('df每列的數據類型為:')print(df.dtypes)STEP02df的行索引為:RangeIndex(start=0,stop=24,step=1)df的列索引為:Index(['年','月','平均流動資產','平均非流動資產’,'平均流動負債','平均非流動負債','平均所有者權益’],dtype='object')df的形狀為:(24,7)df的元素個數為:168df的維數為:2df每列的數據類型為:年object月object平均流動資產float64平均非流動資產float64平均流動負債float64平均非流動負債int64平均所有者權益float64dtype:object任務4.1Pandas的基本操作采用drop()函數刪除平均所有者權益列。程序如下:df.drop(columns='平均所有者權益',inplace=True)df.head()#查看前5行數據STEP03任務4.1Pandas的基本操作通過計算新增平均資產合計、平均負債合計列。程序如下:df['平均資產合計']=df['平均流動資產']+df['平均非流動資產']df['平均負債合計']=df['平均流動負債']+df['平均非流動負債']df.head()#查看前5行數據STEP04任務4.1Pandas的基本操作任務實訓請上機編寫程序實現以下要求:讀取財務數據表fin_data.xlsx(位置:E:\file\)中的利潤表項目到Python,查看其DataFrame對象的屬性,通過計算的方式增加營業凈利率列,然后刪除營業成本列。任務評價評價類別評價內容分值得分綜合得分知識與技能評價(70%)能正確讀入Excel表格20

能正確查看DataFrame對象的屬性20

能正確刪除營業成本列10

能正確增加營業凈利率列20

素質評價(30%)具有刻苦、勤奮、好問、獨立思考和細心檢查的學習習慣10

能與組員精誠合作,能正確面對成功或失敗10

具有一定的自學能力,分析問題、解決問題能力和創新能力10

任務4.1Pandas的基本操作引入案例任務分析知識解析案例解析任務實訓實訓評價4.2.1直接篩選4.2.2索引器篩選4.2.3條件篩選任務4.2利用Pandas進行財務數據篩選任務4.2

利用Pandas進行財務數據篩選任務4.2利用Pandas進行財務數據篩選引入案例美創科技有限公司財務人員小王想要從企業員工加班工資表.xlsx(位置:E:\file\)中篩選出部門為基本生產車間并且加班費高于1600元以上的員工數據,在Pandas中該如何實現呢?任務分析從Excel文件導入到Python中的DataFrame數據包含了很多信息,通常需要從原始DataFrame數據中篩選一部分信息做分析。根據不同的情況,可以采用直接篩選、條件篩選和索引器篩選從DataFrame對象中選取數據。知識解析在對數據做相應操作之前,應先篩選出所需的數據。DataFrame對象的數據訪問類似于二維數組,可以通過值的位置序號獲取,同時由于行、列都關聯了索引標簽,也可以通過索引來進行訪問。DataFrame對象的數據篩選可分為直接篩選、條件篩選和索引器篩選三種。任務4.2利用Pandas進行財務數據篩選4.2.1

直接篩選篩選方式語法格式選取某列DataFrame[col],其中col表示列名。選取多列DataFrame[colList],其中colList表示列名組成的列表。選取多行(切片)或某行DataFrame[index1:index2],其中index表示行自定義索引。說明:采用自定義索引,當index1=index2時表示選擇某一行。②DataFrame[num1:num2],其中num表示行原始索引。說明:采用原始索引,當數字連續時表示選擇某一行。選取多行多列DataFrame[colList][index1:index2]DataFrame[colList][num1:num2]【請注意】(1)采用直接篩選選取連續多列不能采用切片操作,只能采用列表的形式;(2)在進行多行多列直接篩選時,一般要先進行列篩選,然后再進行行篩選。任務4.2利用Pandas進行財務數據篩選

【做中學4.2.1】讀入fin_data.xlsx(位置:E:\file\)中的第一個表格,使用采用篩選方式進行數據選取。【做中學4.2.1】解析如下:導入Excel表格數據并查看。其程序如下:importpandasaspd#導入Pandas模塊#讀取Excel文件df=pd.read_excel(r'E:\file\fin_data.xlsx',sheet_name="資產負債表項目",

converters={'年':str,'月':str})df.head()#查看前5行數據STEP01任務4.2利用Pandas進行財務數據篩選選取某一列。其程序如下:df['平均流動負債'].head()STEP02選取多列。其程序如下:df[['年','平均流動資產','平均所有者權益']].head()STEP03選取多行。其程序如下:df[0:3]#利用行索引選取數據,區間前閉后開STEP04選取多行多列。其程序如下:df[['平均流動資產','平均非流動資產']][1:4]STEP05任務4.2利用Pandas進行財務數據篩選4.2.2索引器篩選loc索引器優先使用自定義索引,如果數據中沒有自定義索引,則使用原始索引,根據行索引和列索引進行選取,先行后列,也可以只選取行。采用loc索引器形成的篩選方式及語法格式如下表所示。篩選方式語法格式①選取單行DataFrame.loc[index]②選取不連續多行DataFrame.loc[indexList]③選取連續多行DataFrame.loc[index1:index2]④選取單列DataFrame.loc[:,col]⑤選取不連續多列DataFrame.loc[:,colList]⑥選取連續多列DataFrame.loc[:,col1:col2]⑦選取不連續多行多列DataFrame.loc[indexList,colList]⑧選取連續多行多列DataFrame.loc[index1:index2,col1:col2]【請注意】①在進行多行多列數據篩選時,列表和切片可聯合使用;②loc索引器不能直接選取列,必須先行后列。任務4.2利用Pandas進行財務數據篩選

【做中學4.2.2】讀入fin_data2.xlsx(位置:E:\file\)中的第一個表格,并使用上表中列舉的篩選方式進行數據選取。

【做中學4.2.2】解析如下:導入Excel表格數據并查看。其程序如下:importpandasaspd#引入Pandas模塊#讀取Excel文件中的第一張表格數據df=pd.read_excel(r'E:\file\fin_data.xlsx',sheet_name=0,converters={'年':str,'月':str})df.head()#查看df的前5行數據STEP01任務4.2利用Pandas進行財務數據篩選選取單行。其程序如下:df.loc[2]#選取索引為2的行數據STEP02選取不連續多行。其程序如下:df.loc[[1,3]]#選取行索引為1和3兩行的數據STEP03選取連續多行。其程序如下:df.loc[1:3]#選取連續3行數據STEP04選取單列。其程序如下:df.loc[:,'平均所有者權益'].head()STEP05任務4.2利用Pandas進行財務數據篩選選取不連續多列。其程序如下:df.loc[:,['平均流動資產','平均所有者權益']].head()STEP06選取連續多列。其程序如下:df.loc[:,'平均流動負債':'平均所有者權益'].head()STEP07選取不連續多行多列。其程序如下:df.loc[[1,3],['平均流動資產','平均所有者權益']]STEP08選取連續多行多列。其程序如下:df.loc[1:3,'平均流動負債':'平均所有者權益']STEP09任務4.2利用Pandas進行財務數據篩選4.2.3條件篩選語法格式舉例說明DataFrame[conditon]根據列條件選擇行df[df[col]==value]表示選取某列滿足一定條件的行df[(df[col1]==value)&(df[col2]>value)]表示選取多列滿足一定條件的行根據行索引選擇行df[df.index==’行索引’]表示選擇單行df[(df.index==’行索引’)|df.index==’行索引’)]表示選擇兩行,可使用“|”選擇更多行DataFrame.loc[condition,cols]表示選取滿足條件的行及指定列種類符號及含義比較運算符<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、!=(不等于)、==(等于)邏輯運算符&(與)、|(或)、~(取反)【請注意】條件表達式可以使用操作符&、|、~,但是不能使用關鍵詞and、or、not。任務4.2利用Pandas進行財務數據篩選

【做中學4.2.3】讀入fin_data.xlsx(位置:E:\file\)中的第一個表格,并使用上表中列舉的篩選方式進行數據選取。導入Excel表格數據并查看前5行數據。其程序如下:importpandasaspd#引入Pandas模塊#讀取Excel文件中的第一張表格數據df=pd.read_excel(r'E:\file\fin_data.xlsx',sheet_name=0,converters={'年':str,'月':str})df.head()#查看前5行數據STEP01【做中學4.2.3】解析如下:任務4.2利用Pandas進行財務數據篩選采用DataFrame[conditon]方式根據某一列滿足的一定條件選取行數據的程序如下:df[df['年']=='2023'] #選取年列的列值為2023的數據STEP02任務4.2利用Pandas進行財務數據篩選采用DataFrame[conditon]方式,根據多列滿足一定條件選取行數據的程序如下:df[(df['年']=='2023')&(df['平均所有者權益']<2000000)]STEP03采用DataFrame.loc[condition,cols]方式選取數據的程序如下:df.loc[df['平均所有者權益']<1900000,['年','月','平均所有者權益']]STEP04任務4.2利用Pandas進行財務數據篩選案例解析讀入企業員工加班工資表.xlsx(位置:E:\file\)。程序如下:importpandasaspd#導入Pandas模塊df=pd.read_excel(r'E:\file\企業員工加班工資表.xlsx')df.head()#查看前5行數據STEP01任務4.2利用Pandas進行財務數據篩選篩選出部門為基本生產車間并且加班工資高于1600元以上的數據。程序如下:df[(df['部門']=='基本生產車間')&(df['加班費']>1600)]STEP02任務4.2利用Pandas進行財務數據篩選任務實訓

請上機編寫程序實現以下要求:讀取企業員工加班工資表.xlsx(位置:E:\file\),使用條件篩選的兩種方式從企業員工加班工資表中篩選出部門為輔助生產車間并且加班費高于1000元以上的數據。實訓評價評價類別評價內容分值得分綜合得分知識與技能評價(70%)能正確讀入Excel表格10

能利用條件篩選獲得數據30

能利用索引器篩選獲得數據30

素質評價(30%)具有刻苦、勤奮、好問、獨立思考和細心檢查的學習習慣10

能與組員精誠合作,能正確面對成功或失敗10

具有一定的自學能力,分析問題、解決問題能力和創新能力10

引入案例任務分析知識解析案例解析任務實訓實訓評價4.3.1map()函數4.3.2apply()函數4.3.3applymap()函數任務4.3

利用Pandas高階函數進行數據處理任務4.3

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

利用Pandas高階函數進行數據處理

從輸出結果來看,新增一列業績評價,其值為達標或不達標,其原理是將凈利潤率列每個元素逐一傳入lambda()函數得到返回值,如下圖所示。任務4.3利用Pandas高階函數進行數據處理使用Series.map(dict)的形式確定是否發放獎金。程序如下:df['是否發放獎金']=df['業績評價'].map({'達標':'發放','不達標':'不發放'})df.head()#查看df前5行數據STEP03任務4.3利用Pandas高階函數進行數據處理

從輸出結果來看,新增一列是否發放獎金,其值為發放或不發放,其原理是將業績評價列每個元素逐一傳入字典作為鍵,返回對應的值,如下圖所示。不論是利用字典參數還是函數進行映射,map()函數都是把對應的數據逐個當作參數傳入到字典或函數中,得到映射后的值。任務4.3利用Pandas高階函數進行數據處理4.3.2apply()函數一、Series.apply()

Series.apply()函數在Series值上調用函數,與Series.map()類似,區別在于apply()函數能夠傳入功能更復雜的函數。Series.apply()函數語法格式如下:Series.apply(func,convert_dtype=True,args=(),**kwargs)Series.apply()函數參數說明參數說明func接收函數。表示要應用的Python函數或NumPyufunc。convert_dtype接收bool,默認True。嘗試為所有元素應用函數后的結果找到更好的數據類型。如果為False,則保留dtype=object。args接收元組。除了序列之外,要傳遞給函數的位置參數。單個元素需在括號內加逗號。**kwargs表示傳遞給func的其他關鍵字數。任務4.3利用Pandas高階函數進行數據處理【做中學4.3.2】以【做中學4.3.1】最終生成的df數據對象為基礎,現需要調整營業收入金額,而具體調整的金額未知,請使用Series.apply()函數實現營業收入的調整。【做中學4.3.2】解析如下:因需要對營業收入進行調整(加上或減去一個值),由于這個加上或減去的值未知,可使用自定義函數并需要多加一個參數,此時map()函數是不能實現的(

溫馨提示

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

評論

0/150

提交評論