《Python與數(shù)據(jù)分析應用》課件-第10章 數(shù)據(jù)分析工具Pandas_第1頁
《Python與數(shù)據(jù)分析應用》課件-第10章 數(shù)據(jù)分析工具Pandas_第2頁
《Python與數(shù)據(jù)分析應用》課件-第10章 數(shù)據(jù)分析工具Pandas_第3頁
《Python與數(shù)據(jù)分析應用》課件-第10章 數(shù)據(jù)分析工具Pandas_第4頁
《Python與數(shù)據(jù)分析應用》課件-第10章 數(shù)據(jù)分析工具Pandas_第5頁
已閱讀5頁,還剩80頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第十章

數(shù)據(jù)分析工具Pandas在此輸入副標題·數(shù)據(jù)結構分析·索引操作及高級索引·數(shù)據(jù)排序·統(tǒng)計計算與描述·層次化索引·讀寫數(shù)據(jù)操作掌握掌握掌握掌握

1234學習目標掌握數(shù)據(jù)結構分析,索引操作及高級索引掌握讀寫數(shù)據(jù)操作掌握算術運算與數(shù)據(jù)對齊,數(shù)據(jù)排序掌握統(tǒng)計計算與描述

,層次化索引目錄CONTENTS10.110.210.310.410.510.610.7Pandas的數(shù)據(jù)結構分析Pandas索引操作及高級索引算術運算與數(shù)據(jù)對齊數(shù)據(jù)排序統(tǒng)計計算與描述層次化索引讀寫數(shù)據(jù)操作

第一部分PART0110.1Pandas的數(shù)據(jù)結構分析Pandas中有兩個主要的數(shù)據(jù)結構:Series和DataFrame。Series一維的數(shù)據(jù)結構。DataFrame二維的、表格型的數(shù)據(jù)結構。10.1.1SeriesSeries是一個類似一維數(shù)組的對象,它能夠保存任何類型的數(shù)據(jù),主要由一組數(shù)據(jù)和與之相關的索引兩部分構成。注意:Series的索引位于左邊,數(shù)據(jù)位于右邊。10.1.1SeriesPandas的Series類對象可以使用以下構造方法創(chuàng)建:data:表示傳入的數(shù)據(jù)。index:表示索引,唯一且與數(shù)據(jù)長度相等,默認會自動創(chuàng)建一個從0~N的整數(shù)索引。class

pandas.Series(data=None,index=None,dtype=None,name=None,copy=False,fastpath=False)10.1.1Series通過傳入一個列表來創(chuàng)建一個Series類對象:#創(chuàng)建Series類對象ser_obj=pd.Series([1,2,3,4,5])#創(chuàng)建Series類對象,并指定索引ser_obj=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])10.1.1Series除了使用列表構建Series類對象外,還可以使用dict進行構建。year_data={2001:17.8,2002:20.1,2003:16.5}ser_obj2=pd.Series(year_data)10.1.1Series為了能方便地操作Series對象中的索引和數(shù)據(jù),所以該對象提供了兩個屬性index和values分別進行獲取。#獲取ser_obj的索引ser_obj.index#獲取ser_obj的數(shù)據(jù)ser_obj.values10.1.1Series當然,我們也可以直接使用索引來獲取數(shù)據(jù)。#獲取位置索引3對應的數(shù)據(jù)ser_obj[3]10.1.1Series當某個索引對應的數(shù)據(jù)進行運算以后,其運算的結果會替換原數(shù)據(jù),仍然與這個索引保持著對應的關系。ser_obj*2abc123abc24610.1.1SeriesDataFrame是一個類似于二維數(shù)組或表格(如excel)的對象,它每列的數(shù)據(jù)可以是不同的數(shù)據(jù)類型。注意:DataFrame的索引不僅有行索引,還有列索引,數(shù)據(jù)可以有多列。10.1.2DataFramePandas的DataFrame類對象可以使用以下構造方法創(chuàng)建:index:表示行標簽。若不設置該參數(shù),則默認會自動創(chuàng)建一個從0~N的整數(shù)索引。columns:表示列標簽。若不設置該參數(shù),則默認會自動創(chuàng)建一個從0~N的整數(shù)索引。pandas.DataFrame(data=None,index=None,columns=None,dtype=None,copy=False

)10.1.2DataFrame通過傳入數(shù)組來創(chuàng)建DataFrame類對象:#創(chuàng)建數(shù)組demo_arr=np.array([['a','b','c'],

['d','e','f']])#基于數(shù)組創(chuàng)建DataFrame對象df_obj=pd.DataFrame(demo_arr)10.1.2DataFrame在創(chuàng)建DataFrame類對象時,如果為其指定了列索引,則DataFrame的列會按照指定索引的順序進行排列。df_obj=pd.DataFrame(demo_arr,columns=['No1','No2','No3'])

No1No2No30abc1def10.1.2DataFrame我們可以使用列索引的方式來獲取一列數(shù)據(jù),返回的結果是一個Series對象。#通過列索引的方式獲取一列數(shù)據(jù)element=df_obj['No2']#查看返回結果的類型type(element)pandas.core.series.Series10.1.2DataFrame我們還可以使用訪問屬性的方式來獲取一列數(shù)據(jù),返回的結果是一個Series對象。#通過屬性獲取列數(shù)據(jù)element=df_obj.No2#查看返回結果的類型type(element)pandas.core.series.Series10.1.2DataFrame在獲取DataFrame的一列數(shù)據(jù)時,推薦使用列索引的方式完成,主要是因為在實際使用中,列索引的名稱中很有可能帶有一些特殊字符(如空格),這時使用“點字符”進行訪問就顯得不太合適了。10.1.2DataFrame要想為DataFrame增加一列數(shù)據(jù),則可以通過給列索引或者列名稱賦值的方式實現(xiàn)。#增加No4一列數(shù)據(jù)df_obj['No4']=['g','h']10.1.2DataFrame要想刪除某一列數(shù)據(jù),則可以使用del語句實現(xiàn)。#刪除No3一列數(shù)據(jù)deldf_obj['No3']10.1.2DataFrame

第二部分PART0210.2Pandas索引操作及高級索引Pandas中的索引都是Index類對象,又稱為索引對象,該對象是不可以進行修改的,以保障數(shù)據(jù)的安全。10.2.1索引對象Pandas還提供了很多Index的子類,常見的有如下幾種:(1)Int64Index:針對整數(shù)的特殊Index對象。(2)MultiIndex:層次化索引,表示單個軸上的多層索引。(3)DatetimeIndex:存儲納秒寄時間戳。10.2.1索引對象Pandas中提供了一個重要的方法是reindex(),該方法的作用是對原索引和新索引進行匹配,也就是說,新索引含有原索引的數(shù)據(jù),而原索引數(shù)據(jù)按照新索引排序。如果新索引中沒有原索引數(shù)據(jù),那么程序不僅不會報錯,而且會添加新的索引,并將值填充為NaN或者使用fill_vlues()填充其他值。10.2.2重置索引reindex()方法的語法格式如下:

index:用作索引的新序列。

method:插值填充方式。

fill_value:引入缺失值時使用的替代值。

limit:前向或者后向填充時的最大填充量。DataFrame.reindex(labels=None,index=None,columns=None,axis=None,method=None,copy=True,level=None,fill_value=nan,limit=None,tolerance=None

)10.2.2重置索引如果不想填充為NaN,則可以使用fill_value參數(shù)來指定缺失值。ser_obj.reindex(['a','b','c','d','e','f'],fill_value=6)10.2.2重置索引如果期望使用相鄰的元素值進行填充,則可以使用method參數(shù),該參數(shù)對應的值有多個。10.2.2重置索引Series有關索引的用法類似于NumPy數(shù)組的索引,只不過Series的索引值不只是整數(shù)。如果我們希望獲取某個數(shù)據(jù),既可以通過索引的位置來獲取,也可以使用索引名稱來獲取。ser_obj=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])ser_obj[2]#

使用索引位置獲取數(shù)據(jù)ser_obj['c']#使用索引名稱獲取數(shù)據(jù)10.2.3索引操作如果使用的是位置索引進行切片,則切片結果是不包含結束位置;如果使用索引名稱進行切片,則切片結果是包含結束位置的。ser_obj=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])ser_obj[2:4]#使用位置索引進行切片ser_obj['c':'e']#使用索引名稱進行切片10.2.3索引操作如果希望獲取的是不連續(xù)的數(shù)據(jù),則可以通過不連續(xù)索引來實現(xiàn)。#通過不連續(xù)位置索引獲取數(shù)據(jù)集ser_obj[[0,2,4]]#通過不連續(xù)索引名稱獲取數(shù)據(jù)集ser_obj[['a','c','d']]10.2.3索引操作布爾型索引同樣適用于Pandas,具體的用法跟數(shù)組的用法一樣,將布爾型的數(shù)組索引作為模板篩選數(shù)據(jù),返回與模板中True位置對應的元素。#創(chuàng)建布爾型Series對象ser_bool=ser_obj>2#獲取結果為True的數(shù)據(jù)ser_obj[ser_bool]10.2.3索引操作DataFrame結構既包含行索引,也包含列索引。其中,行索引是通過index屬性進行獲取的,列索引是通過columns屬性進行獲取的。10.2.3索引操作雖然DataFrame操作索引能夠滿足基本數(shù)據(jù)查看請求,但是仍然不夠靈活。為此,Pandas庫中提供了操作索引的方法來訪問數(shù)據(jù),具體包括:loc:基于標簽索引(索引名稱),用于按標簽選取數(shù)據(jù)。當執(zhí)行切片操作時,既包含起始索引,也包含結束索引。iloc:基于位置索引(整數(shù)索引),用于按位置選取數(shù)據(jù)。當執(zhí)行切片操作時,只包含起始索引,不包含結束索引。10.2.3索引操作

第三部分PART0310.3算術運算與數(shù)據(jù)對齊Pandas執(zhí)行算術運算時,會先按照索引進行對齊,對齊以后再進行相應的運算,沒有對齊的位置會用NaN進行補齊。10.3算數(shù)運算與數(shù)據(jù)對齊如果希望不使用NAN填充缺失數(shù)據(jù),則可以在調用add方法時提供fill_value參數(shù)的值,fill_value將會使用對象中存在的數(shù)據(jù)進行補充。#執(zhí)行加法運算,補充缺失值obj_one.add(obj_two,fill_value=0)10.3算數(shù)運算與數(shù)據(jù)對齊

第四部分PART0410.4數(shù)據(jù)排序Pandas中按索引排序使用的是sort_index()方法,該方法可以用行索引或者列索引進行排序。

axis:軸索引,0表示index(按行),1表示columns(按列)。

level:若不為None,則對指定索引級別的值進行排序。

ascending:是否升序排列,默認為True表示升序。sort_index(axis=0,level=None,ascending=True,inplace=False,kind='

quicksort

',na_position='last',sort_remaining=True

)10.4.1按索引排序按索引對Series進行分別排序,示例如下。ser_obj=pd.Series(range(10,15),index=[5,3,1,3,2])#按索引進行升序排列ser_obj.sort_index()#按索引進行降序排列ser_obj.sort_index(ascending=False)10.4.1按索引排序按索引對DataFrame進行分別排序,示例如下。df_obj=pd.DataFrame(np.arange(9).reshape(3,3),

index=[4,3,5])#按行索引升序排列df_obj.sort_index()#按行索引降序排列df_obj.sort_index(ascending=False)10.4.1按索引排序Pandas中用來按值排序的方法為sort_values(),該方法的語法格式如下。by參數(shù)表示排序的列,na_position參數(shù)只有兩個值:first和last,若設為first,則會將NaN值放在開頭;若設為False,則會將NaN值放在最后。sort_values(by,axis=0,

ascending=True,

inplace=False,

kind='quicksort',na_position='last')10.4.2按值排序按值的大小對Series進行排序的示例如下:ser_obj=pd.Series([4,np.nan,6,np.nan,-3,2])#按值升序排列ser_obj.sort_values()10.4.2按值排序在DataFrame中,sort_values()方法可以根據(jù)一個或多個列中的值進行排序,但是需要在排序時,將一個或多個列的索引傳遞給by參數(shù)才行。df_obj=pd.DataFrame([[0.4,-0.1,-0.3,0.0],[0.2,0.6,-0.1,-0.7],[0.8,0.6,-0.5,0.1]])#對列索引值為2的數(shù)據(jù)進行排序df_obj.sort_values(by=2)10.4.2按值排序

第五部分PART0510.5統(tǒng)計計算與描述Pandas為我們提供了非常多的描述性統(tǒng)計分析的指標方法,比如總和、均值、最小值、最大值等。10.5.1常用的統(tǒng)計計算如果希望一次性輸出多個統(tǒng)計指標,則我們可以調用describe()方法實現(xiàn),語法格式如下。percentiles:輸出中包含的百分數(shù),位于[0,1]之間。如果不設置該參數(shù),則默認為[0.25,0.5,0.75],返回25%,50%,75%分位數(shù)。describe(percentiles=None,

include=None,

exclude=None)10.5.2統(tǒng)計描述

第六部分PART0610.6層次化索引思考:什么是層次化索引?10.6.1認識層次化索引前面所涉及的Pandas對象都只有一層索引結構,又稱為單層索引,層次化索引可以理解為單層索引的延伸,即在一個軸方向上具有多層索引。結論10.6.1認識層次化索引對于兩層索引結構來說,它可以分為內層索引和外層索引。10.6.1認識層次化索引Series和DataFrame均可以實現(xiàn)層次化索引,最常見的方式是在構造方法的index參數(shù)中傳入一個嵌套列表。

mulitindex_series=pd.Series([15848,13472,12073.8,7813,

7446,6444,15230,8269],

index=[['河北省','河北省','河北省','河北省',

'河南省','河南省','河南省','河南省'],

['石家莊市','唐山市','邯鄲市','秦皇島市',

'鄭州市','開封市','洛陽市','新鄉(xiāng)市']])10.6.1認識層次化索引在創(chuàng)建層次化索引對象時,嵌套函數(shù)中兩個列表的長度必須是保持一致的,否則將會出現(xiàn)ValueError錯誤。10.6.1認識層次化索引還可以通過MultiIndex類的方法構建一個層次化索引,該類提供了3種創(chuàng)建層次化索引的方法:MultiIndex.from_tuples():將元組列表轉換為MultiIndex。MultiIndex.from_arrays():將數(shù)組列表轉換為MultiIndex。MultiIndex.from_product():從多個集合的笛卡爾乘積中創(chuàng)建一個MultiIndex。10.6.1認識層次化索引from_tuples()方法可以將包含若干個元組的列表轉換為MultiIndex對象,其中元組的第一個元素作為外層索引,元組的第二個元素作為內層索引。list_tuples=[('A','A1'),('A','A2'),('B','B1'),('B','B2'),('B','B3')]#根據(jù)元組列表創(chuàng)建一個MultiIndex對象multi_index=MultiIndex.from_tuples(tuples=list_tuples,names=['外層索引','內層索引'])10.6.1認識層次化索引from_arrays()方法是將數(shù)組列表轉換為MultiIndex對象,其中嵌套的第一個列表將作為外層索引,嵌套的第二個列表將作為內層索引。multi_array=MultiIndex.from_arrays(arrays=[['A','B','A','B','B'],['A1','A2','B1','B2','B3']],names=['外層索引','內層索引'])10.6.1認識層次化索引from_product()方法表示從多個集合的笛卡爾乘積中創(chuàng)建一個MultiIndex對象。numbers=[0,1,2]colors=['green','purple']multi_product=pd.MultiIndex.from_product(iterables=[numbers,colors],

names=['number','color'])10.6.1認識層次化索引在數(shù)學中,兩個集合X和Y的笛卡尓積,又稱直積,表示為X

×

Y,第一個對象是X的成員,而第二個對象是Y的所有可能有序對的其中一個成員

。假設集合A={a,b},集合B={0,1,2},則兩個集合的笛卡爾積為{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。10.6.1認識層次化索引假設某商城在3月份統(tǒng)計了書籍的銷售情況,并記錄在下表中。從左邊數(shù)第1列的數(shù)據(jù)表示書籍的類別,第2列的數(shù)據(jù)表示書籍的名稱,第3列的數(shù)據(jù)表示書籍的銷售數(shù)量。其中,第1列作為外層索引使用,第2列作為內層索引使用。10.6.2層次化索引的操作根據(jù)書籍統(tǒng)計表,創(chuàng)建一個具有多層索引的Series對象,示例如下:ser_obj=Series([50,60,40,94,63,101,200,56,45],index=[['小說','小說','小說','散文隨筆','散文隨筆','散文隨筆',

'傳記','傳記','傳記'],

['高山上的小郵局','失蹤的總統(tǒng)','綠毛水怪',

'皮囊','浮生六記','自在獨行',

'梅西','老舍自傳','庫里傳']])10.6.2層次化索引的操作如果商城管理員需要統(tǒng)計小說銷售的情況,則可以從表中篩選出外層索引標簽為小說的數(shù)據(jù)。#獲取所有外層索引為“小說”的數(shù)據(jù)ser_obj['小說']高山上的小郵局50失蹤的總統(tǒng)

60綠毛水怪

4010.6.2層次化索引的操作假設當前只知道書名為“自在獨行”,但所屬的類別和銷售數(shù)量并不清楚,則需要操作內層索引獲取該書籍的類別與銷售數(shù)量。#獲取內層索引對應的數(shù)據(jù)ser_obj[:,'自在獨行']散文隨筆

10110.6.2層次化索引的操作交換分層順序是指交換外層索引和內層索引的位置。10.6.2層次化索引的操作在Pandas中,交換分層順序的操作可以使用swaplevel()方法來完成。#交換外層索引與內層索引位置ser_obj.swaplevel()10.6.2層次化索引的操作要想按照分層索引對數(shù)據(jù)排序,則可以通過sort_index()方法實現(xiàn)。sort_index(axis=0,level=None,ascending=True,inplace=False,kind='quicksort',na_position='last',sort_remaining=True,by=None)by:表示按指定的值排序。ascending:布爾值,表示是否升序排列,默認為True。10.6.2層次化索引的操作在使用sort_index()方法排序時,會優(yōu)先選擇按外層索引進行排序,然后再按照內層索引進行排序。10.6.2層次化索引的操作

第七部分PART0710.7讀寫數(shù)據(jù)操作在進行數(shù)據(jù)分析時,通常不會將需要分析的數(shù)據(jù)直接寫入到程序中,這樣不僅造成程序代碼臃腫,而且可用率很低。常用的解決方法是將待分析的數(shù)據(jù)存儲到本地中,之后再對存儲文件進行讀取。文本文件Excel文件HTML文件數(shù)據(jù)庫10.7.1讀寫文本文件CSV文件是一種純文本文件,可以使用任何文本編輯器進行編輯,它支持追加模式,節(jié)省內存開銷。10.7.1讀寫文本文件to_csv()方法的功能是將數(shù)據(jù)寫入到CSV文件中。to_csv(path_or_buf=None,sep=',',na_rep='',float_format=None,columns=None,header=True,index=True,index_label=None,mode='w‘,...)path_or_buf:文件路徑。index:默認為True,若設為False,則將不會顯示索引。sep:分隔符,默認用“,”隔開。10.7.1讀寫文本文件read_csv()函數(shù)的作用是將CSV文件的數(shù)據(jù)讀取出來,轉換成DataFrame對象展示。read_csv(filepath_or_buffer,sep=',',delimiter=None,header='infer',names=None,index_col=None,usecols=None,prefix=None,...)sep:指定使用的分隔符,默認用“,”分隔。header:指定行數(shù)用來作為列名。names:用于結果的列名列表。如果文件不包含標題行,則應該將該參數(shù)設置為None。10.7.1讀寫文本文件Text格式的文件也是比較常見的存儲數(shù)據(jù)的方式,后綴名為".txt",它與上面提到的CSV文件都屬于文本文件。如果希望讀取Text文件,既可以用前面提到的read_csv()函數(shù),也可以使用read_table()函數(shù)。10.7.1讀寫文本文件read_csv()與read_table()函數(shù)的區(qū)別在于使用的分隔符不同,前者使用“,”作為分隔符,而后者使用“\t”作為分隔符。10.7.1讀寫文本文件Excel文件也是比較常見的存儲數(shù)據(jù)的文件,它里面均是以二維表格的形式顯示的,可以對數(shù)據(jù)進行統(tǒng)計、分析等操作。Excel的文件擴展名有.xls和.xlsx兩種。.xls.xlsx10.7.2讀寫Excel文件to_excel()方法的功能是將DataFrame對象寫入到Excel工作表中。to_excel(excel_writer,sheet_name='Sheet1',na_rep='',float_format=None,columns=None,header=True,index=True,...)excel_writer:表示讀取的文件路徑。sheet_name:表示工作表的名稱,默認為“Sheet1”。na_rep:表示缺失數(shù)據(jù)。index:表示是否寫行索引,默認為True。10.7.2讀寫Excel文件read_excel()函數(shù)的作用是將Excel中的數(shù)據(jù)讀取出來,轉換成DataFrame展示。pandas.read_excel(io,sheet_name=0,header=0,names=None,index_col=None,

**kwds)io:表示路徑對象。sheet_name:指定要讀取的工作表,默認為0。header:用于解析DataFrame的列標簽。names:要使用的列名稱。10.7.2讀寫Excel文件在瀏覽網(wǎng)頁時,有些數(shù)據(jù)會在HTML網(wǎng)頁中以表格的形式進行展示。10.7.3讀取HTML表格數(shù)據(jù)對于網(wǎng)頁中的表格,可以使用read_html()函數(shù)進行讀取,并返回一個包含多個DataFrame對象的列表。pandas.read_html(io,match='.+',flavor=None,header=None,index_col=None,skiprows=None,attrs=None)io:表示路徑對象。header:表示指

溫馨提示

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

評論

0/150

提交評論