




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第十章
數據分析工具Pandas在此輸入副標題·數據結構分析·索引操作及高級索引·數據排序·統計計算與描述·層次化索引·讀寫數據操作掌握掌握掌握掌握
1234學習目標掌握數據結構分析,索引操作及高級索引掌握讀寫數據操作掌握算術運算與數據對齊,數據排序掌握統計計算與描述
,層次化索引目錄CONTENTS10.110.210.310.410.510.610.7Pandas的數據結構分析Pandas索引操作及高級索引算術運算與數據對齊數據排序統計計算與描述層次化索引讀寫數據操作
第一部分PART0110.1Pandas的數據結構分析Pandas中有兩個主要的數據結構:Series和DataFrame。Series一維的數據結構。DataFrame二維的、表格型的數據結構。10.1.1SeriesSeries是一個類似一維數組的對象,它能夠保存任何類型的數據,主要由一組數據和與之相關的索引兩部分構成。注意:Series的索引位于左邊,數據位于右邊。10.1.1SeriesPandas的Series類對象可以使用以下構造方法創建:data:表示傳入的數據。index:表示索引,唯一且與數據長度相等,默認會自動創建一個從0~N的整數索引。class
pandas.Series(data=None,index=None,dtype=None,name=None,copy=False,fastpath=False)10.1.1Series通過傳入一個列表來創建一個Series類對象:#創建Series類對象ser_obj=pd.Series([1,2,3,4,5])#創建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對象中的索引和數據,所以該對象提供了兩個屬性index和values分別進行獲取。#獲取ser_obj的索引ser_obj.index#獲取ser_obj的數據ser_obj.values10.1.1Series當然,我們也可以直接使用索引來獲取數據。#獲取位置索引3對應的數據ser_obj[3]10.1.1Series當某個索引對應的數據進行運算以后,其運算的結果會替換原數據,仍然與這個索引保持著對應的關系。ser_obj*2abc123abc24610.1.1SeriesDataFrame是一個類似于二維數組或表格(如excel)的對象,它每列的數據可以是不同的數據類型。注意:DataFrame的索引不僅有行索引,還有列索引,數據可以有多列。10.1.2DataFramePandas的DataFrame類對象可以使用以下構造方法創建:index:表示行標簽。若不設置該參數,則默認會自動創建一個從0~N的整數索引。columns:表示列標簽。若不設置該參數,則默認會自動創建一個從0~N的整數索引。pandas.DataFrame(data=None,index=None,columns=None,dtype=None,copy=False
)10.1.2DataFrame通過傳入數組來創建DataFrame類對象:#創建數組demo_arr=np.array([['a','b','c'],
['d','e','f']])#基于數組創建DataFrame對象df_obj=pd.DataFrame(demo_arr)10.1.2DataFrame在創建DataFrame類對象時,如果為其指定了列索引,則DataFrame的列會按照指定索引的順序進行排列。df_obj=pd.DataFrame(demo_arr,columns=['No1','No2','No3'])
No1No2No30abc1def10.1.2DataFrame我們可以使用列索引的方式來獲取一列數據,返回的結果是一個Series對象。#通過列索引的方式獲取一列數據element=df_obj['No2']#查看返回結果的類型type(element)pandas.core.series.Series10.1.2DataFrame我們還可以使用訪問屬性的方式來獲取一列數據,返回的結果是一個Series對象。#通過屬性獲取列數據element=df_obj.No2#查看返回結果的類型type(element)pandas.core.series.Series10.1.2DataFrame在獲取DataFrame的一列數據時,推薦使用列索引的方式完成,主要是因為在實際使用中,列索引的名稱中很有可能帶有一些特殊字符(如空格),這時使用“點字符”進行訪問就顯得不太合適了。10.1.2DataFrame要想為DataFrame增加一列數據,則可以通過給列索引或者列名稱賦值的方式實現。#增加No4一列數據df_obj['No4']=['g','h']10.1.2DataFrame要想刪除某一列數據,則可以使用del語句實現。#刪除No3一列數據deldf_obj['No3']10.1.2DataFrame
第二部分PART0210.2Pandas索引操作及高級索引Pandas中的索引都是Index類對象,又稱為索引對象,該對象是不可以進行修改的,以保障數據的安全。10.2.1索引對象Pandas還提供了很多Index的子類,常見的有如下幾種:(1)Int64Index:針對整數的特殊Index對象。(2)MultiIndex:層次化索引,表示單個軸上的多層索引。(3)DatetimeIndex:存儲納秒寄時間戳。10.2.1索引對象Pandas中提供了一個重要的方法是reindex(),該方法的作用是對原索引和新索引進行匹配,也就是說,新索引含有原索引的數據,而原索引數據按照新索引排序。如果新索引中沒有原索引數據,那么程序不僅不會報錯,而且會添加新的索引,并將值填充為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參數來指定缺失值。ser_obj.reindex(['a','b','c','d','e','f'],fill_value=6)10.2.2重置索引如果期望使用相鄰的元素值進行填充,則可以使用method參數,該參數對應的值有多個。10.2.2重置索引Series有關索引的用法類似于NumPy數組的索引,只不過Series的索引值不只是整數。如果我們希望獲取某個數據,既可以通過索引的位置來獲取,也可以使用索引名稱來獲取。ser_obj=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])ser_obj[2]#
使用索引位置獲取數據ser_obj['c']#使用索引名稱獲取數據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索引操作如果希望獲取的是不連續的數據,則可以通過不連續索引來實現。#通過不連續位置索引獲取數據集ser_obj[[0,2,4]]#通過不連續索引名稱獲取數據集ser_obj[['a','c','d']]10.2.3索引操作布爾型索引同樣適用于Pandas,具體的用法跟數組的用法一樣,將布爾型的數組索引作為模板篩選數據,返回與模板中True位置對應的元素。#創建布爾型Series對象ser_bool=ser_obj>2#獲取結果為True的數據ser_obj[ser_bool]10.2.3索引操作DataFrame結構既包含行索引,也包含列索引。其中,行索引是通過index屬性進行獲取的,列索引是通過columns屬性進行獲取的。10.2.3索引操作雖然DataFrame操作索引能夠滿足基本數據查看請求,但是仍然不夠靈活。為此,Pandas庫中提供了操作索引的方法來訪問數據,具體包括:loc:基于標簽索引(索引名稱),用于按標簽選取數據。當執行切片操作時,既包含起始索引,也包含結束索引。iloc:基于位置索引(整數索引),用于按位置選取數據。當執行切片操作時,只包含起始索引,不包含結束索引。10.2.3索引操作
第三部分PART0310.3算術運算與數據對齊Pandas執行算術運算時,會先按照索引進行對齊,對齊以后再進行相應的運算,沒有對齊的位置會用NaN進行補齊。10.3算數運算與數據對齊如果希望不使用NAN填充缺失數據,則可以在調用add方法時提供fill_value參數的值,fill_value將會使用對象中存在的數據進行補充。#執行加法運算,補充缺失值obj_one.add(obj_two,fill_value=0)10.3算數運算與數據對齊
第四部分PART0410.4數據排序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參數表示排序的列,na_position參數只有兩個值: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()方法可以根據一個或多個列中的值進行排序,但是需要在排序時,將一個或多個列的索引傳遞給by參數才行。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的數據進行排序df_obj.sort_values(by=2)10.4.2按值排序
第五部分PART0510.5統計計算與描述Pandas為我們提供了非常多的描述性統計分析的指標方法,比如總和、均值、最小值、最大值等。10.5.1常用的統計計算如果希望一次性輸出多個統計指標,則我們可以調用describe()方法實現,語法格式如下。percentiles:輸出中包含的百分數,位于[0,1]之間。如果不設置該參數,則默認為[0.25,0.5,0.75],返回25%,50%,75%分位數。describe(percentiles=None,
include=None,
exclude=None)10.5.2統計描述
第六部分PART0610.6層次化索引思考:什么是層次化索引?10.6.1認識層次化索引前面所涉及的Pandas對象都只有一層索引結構,又稱為單層索引,層次化索引可以理解為單層索引的延伸,即在一個軸方向上具有多層索引。結論10.6.1認識層次化索引對于兩層索引結構來說,它可以分為內層索引和外層索引。10.6.1認識層次化索引Series和DataFrame均可以實現層次化索引,最常見的方式是在構造方法的index參數中傳入一個嵌套列表。
mulitindex_series=pd.Series([15848,13472,12073.8,7813,
7446,6444,15230,8269],
index=[['河北省','河北省','河北省','河北省',
'河南省','河南省','河南省','河南省'],
['石家莊市','唐山市','邯鄲市','秦皇島市',
'鄭州市','開封市','洛陽市','新鄉市']])10.6.1認識層次化索引在創建層次化索引對象時,嵌套函數中兩個列表的長度必須是保持一致的,否則將會出現ValueError錯誤。10.6.1認識層次化索引還可以通過MultiIndex類的方法構建一個層次化索引,該類提供了3種創建層次化索引的方法:MultiIndex.from_tuples():將元組列表轉換為MultiIndex。MultiIndex.from_arrays():將數組列表轉換為MultiIndex。MultiIndex.from_product():從多個集合的笛卡爾乘積中創建一個MultiIndex。10.6.1認識層次化索引from_tuples()方法可以將包含若干個元組的列表轉換為MultiIndex對象,其中元組的第一個元素作為外層索引,元組的第二個元素作為內層索引。list_tuples=[('A','A1'),('A','A2'),('B','B1'),('B','B2'),('B','B3')]#根據元組列表創建一個MultiIndex對象multi_index=MultiIndex.from_tuples(tuples=list_tuples,names=['外層索引','內層索引'])10.6.1認識層次化索引from_arrays()方法是將數組列表轉換為MultiIndex對象,其中嵌套的第一個列表將作為外層索引,嵌套的第二個列表將作為內層索引。multi_array=MultiIndex.from_arrays(arrays=[['A','B','A','B','B'],['A1','A2','B1','B2','B3']],names=['外層索引','內層索引'])10.6.1認識層次化索引from_product()方法表示從多個集合的笛卡爾乘積中創建一個MultiIndex對象。numbers=[0,1,2]colors=['green','purple']multi_product=pd.MultiIndex.from_product(iterables=[numbers,colors],
names=['number','color'])10.6.1認識層次化索引在數學中,兩個集合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月份統計了書籍的銷售情況,并記錄在下表中。從左邊數第1列的數據表示書籍的類別,第2列的數據表示書籍的名稱,第3列的數據表示書籍的銷售數量。其中,第1列作為外層索引使用,第2列作為內層索引使用。10.6.2層次化索引的操作根據書籍統計表,創建一個具有多層索引的Series對象,示例如下:ser_obj=Series([50,60,40,94,63,101,200,56,45],index=[['小說','小說','小說','散文隨筆','散文隨筆','散文隨筆',
'傳記','傳記','傳記'],
['高山上的小郵局','失蹤的總統','綠毛水怪',
'皮囊','浮生六記','自在獨行',
'梅西','老舍自傳','庫里傳']])10.6.2層次化索引的操作如果商城管理員需要統計小說銷售的情況,則可以從表中篩選出外層索引標簽為小說的數據。#獲取所有外層索引為“小說”的數據ser_obj['小說']高山上的小郵局50失蹤的總統
60綠毛水怪
4010.6.2層次化索引的操作假設當前只知道書名為“自在獨行”,但所屬的類別和銷售數量并不清楚,則需要操作內層索引獲取該書籍的類別與銷售數量。#獲取內層索引對應的數據ser_obj[:,'自在獨行']散文隨筆
10110.6.2層次化索引的操作交換分層順序是指交換外層索引和內層索引的位置。10.6.2層次化索引的操作在Pandas中,交換分層順序的操作可以使用swaplevel()方法來完成。#交換外層索引與內層索引位置ser_obj.swaplevel()10.6.2層次化索引的操作要想按照分層索引對數據排序,則可以通過sort_index()方法實現。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()方法排序時,會優先選擇按外層索引進行排序,然后再按照內層索引進行排序。10.6.2層次化索引的操作
第七部分PART0710.7讀寫數據操作在進行數據分析時,通常不會將需要分析的數據直接寫入到程序中,這樣不僅造成程序代碼臃腫,而且可用率很低。常用的解決方法是將待分析的數據存儲到本地中,之后再對存儲文件進行讀取。文本文件Excel文件HTML文件數據庫10.7.1讀寫文本文件CSV文件是一種純文本文件,可以使用任何文本編輯器進行編輯,它支持追加模式,節省內存開銷。10.7.1讀寫文本文件to_csv()方法的功能是將數據寫入到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()函數的作用是將CSV文件的數據讀取出來,轉換成DataFrame對象展示。read_csv(filepath_or_buffer,sep=',',delimiter=None,header='infer',names=None,index_col=None,usecols=None,prefix=None,...)sep:指定使用的分隔符,默認用“,”分隔。header:指定行數用來作為列名。names:用于結果的列名列表。如果文件不包含標題行,則應該將該參數設置為None。10.7.1讀寫文本文件Text格式的文件也是比較常見的存儲數據的方式,后綴名為".txt",它與上面提到的CSV文件都屬于文本文件。如果希望讀取Text文件,既可以用前面提到的read_csv()函數,也可以使用read_table()函數。10.7.1讀寫文本文件read_csv()與read_table()函數的區別在于使用的分隔符不同,前者使用“,”作為分隔符,而后者使用“\t”作為分隔符。10.7.1讀寫文本文件Excel文件也是比較常見的存儲數據的文件,它里面均是以二維表格的形式顯示的,可以對數據進行統計、分析等操作。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:表示缺失數據。index:表示是否寫行索引,默認為True。10.7.2讀寫Excel文件read_excel()函數的作用是將Excel中的數據讀取出來,轉換成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文件在瀏覽網頁時,有些數據會在HTML網頁中以表格的形式進行展示。10.7.3讀取HTML表格數據對于網頁中的表格,可以使用read_html()函數進行讀取,并返回一個包含多個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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年自然資源部第三海洋研究所招聘在職人員真題
- 高一英語學案:預習導航Bodylanguage-SectionⅢ
- 通信設備安裝合同范本
- 2024年眉山市市屬事業單位考試真題
- 2024年河南洛陽文化旅游職業學院招聘教師真題
- 四年級數學上冊教案 五 信息窗五(小數的改寫與求近似數) 青島版(五四制)
- 五年級下冊數學教案-6.4 圓周率和圓的周長公式丨蘇教版
- 山林承包幫工合同范本
- 生產地點合同范本
- 地理歐洲西部第2課時教學設計-2024-2025學年人教版地理七年級下冊
- 《產業基礎創新發展目錄(2021年版)》(8.5發布)
- GB/T 31266-2014過磷酸鈣中三氯乙醛含量的測定
- GB/T 16422.3-2014塑料實驗室光源暴露試驗方法第3部分:熒光紫外燈
- 計量器具校準記錄
- DB36-T 1694-2022 餐廚垃圾集約化養殖黑水虻技術規程
- 井控培訓知識課件
- 技術合同認定登記培訓課件
- 雙減背景下小學語文作業的有效設計課件
- 十二講船舶制冷裝置課件
- 第12課送你一個書簽
- 耳內鏡微創外科技術PPT通用課件[通用]
評論
0/150
提交評論