《Python從入門到數(shù)據(jù)分析應(yīng)用》 思政課件 第10章 Pandas庫_第1頁
《Python從入門到數(shù)據(jù)分析應(yīng)用》 思政課件 第10章 Pandas庫_第2頁
《Python從入門到數(shù)據(jù)分析應(yīng)用》 思政課件 第10章 Pandas庫_第3頁
《Python從入門到數(shù)據(jù)分析應(yīng)用》 思政課件 第10章 Pandas庫_第4頁
《Python從入門到數(shù)據(jù)分析應(yīng)用》 思政課件 第10章 Pandas庫_第5頁
已閱讀5頁,還剩70頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Python程序設(shè)計——從入門到數(shù)據(jù)分析PYTHONPandas庫10.2Pandas數(shù)據(jù)預(yù)處理操作10.3數(shù)據(jù)統(tǒng)計基礎(chǔ)10.4實例:學(xué)生成績分析10.1Pandas概述第十章學(xué)習(xí)目標(biāo)第十章(1)掌握Pandas數(shù)據(jù)對象及其創(chuàng)建與索引。(2)掌握基于Pandas庫的數(shù)據(jù)預(yù)處理常見操作。(3)掌握數(shù)據(jù)分組和基本統(tǒng)計的計算方法。Pandas概述第十章10.1Pandas庫是在NumPy基礎(chǔ)上建立的用于數(shù)據(jù)分析的Python程序庫。最初由AQRCapitalManagement于2008年4月開發(fā),并于2009年底開源。Pandas庫能夠?qū)?shù)據(jù)進(jìn)行清洗、轉(zhuǎn)換及合并等操作。由于Pandas最初被作為金融數(shù)據(jù)分析工具而開發(fā)出來,因此,它也能夠為時間序列分析提供較好的支持。Pandas的數(shù)據(jù)對象第十章10.1.1Pandas庫的2個基本數(shù)據(jù)對象是Series和DataFrame。Series是帶索引(index)的一維數(shù)組,可以保存任何數(shù)據(jù)類型(整數(shù)、字符串、浮點數(shù)、Python對象等);DataFrame是帶行索引(index)和列索引(columns)的多維數(shù)組,同一列的元素數(shù)據(jù)類型相同,不同列之間的數(shù)據(jù)類型可以不同。數(shù)據(jù)結(jié)構(gòu)Series和DataFrame與NumPy中的ndarray不同之處是顯式地帶有行和列的索引。

Pandas數(shù)據(jù)對象的創(chuàng)建第十章10.1.2(1)創(chuàng)建Series對象。Series對象的創(chuàng)建函數(shù)為pandas庫中的Series()函數(shù),其語法格式如下所示:pd.Series(data,index=None,dtype=None)其中,data表示要創(chuàng)建成為Series的數(shù)據(jù),可以是標(biāo)量、列表、字典、一維ndarray數(shù)組等;index為可選參數(shù),表示Series對象的索引,默認(rèn)從0開始的連續(xù)整數(shù);dtype表示創(chuàng)建的Series對象的元素的數(shù)據(jù)類型,為ndarray.dtype或ExtensionDtype,如果省略,則數(shù)據(jù)類型從data中獲取。如無特殊說明,其后代碼若無導(dǎo)入pandas庫,則表明均已執(zhí)行

importpandasaspd。Pandas數(shù)據(jù)對象的創(chuàng)建第十章10.1.2例10.1~10.4分別展示了從標(biāo)量、列表、字典、一維ndarray數(shù)組創(chuàng)建Series對象的操作?!纠?0.1】由標(biāo)量創(chuàng)建Series對象。運行結(jié)果a6b6c6dtype:int64Pandas數(shù)據(jù)對象的創(chuàng)建第十章10.1.2【例10.2】由列表創(chuàng)建Series對象。運行結(jié)果010012002300dtype:int64Pandas數(shù)據(jù)對象的創(chuàng)建第十章10.1.2【例10.3】由字典創(chuàng)建Series對象。運行結(jié)果a1b2c34455dtype:int64Pandas數(shù)據(jù)對象的創(chuàng)建第十章10.1.2【例10.4】由ndarray創(chuàng)建Series對象。運行結(jié)果01.012.0dtype:float16Pandas數(shù)據(jù)對象的創(chuàng)建第十章10.1.2(2)創(chuàng)建DataFrame對象。DataFrame對象可以由字典創(chuàng)建,字典鍵對應(yīng)的值可以是列表、ndarray數(shù)組、Series對象、字典等,也可以直接由ndarray數(shù)組、字典組成的列表等創(chuàng)建。創(chuàng)建函數(shù)為DataFrame()。其語法格式為:pd.DataFrame(data,index=None,columns=None)其中,data表示DataFrame對象的數(shù)據(jù),參數(shù)index和columns為可選參數(shù),分別用來設(shè)置行索引和列索引。Pandas數(shù)據(jù)對象的創(chuàng)建第十章10.1.2當(dāng)從字典創(chuàng)建DataFrame對象時,字典的鍵作為列索引。如例10.5~10.7分別展示了從字典創(chuàng)建DataFrame對象,字典鍵對應(yīng)的值為列表、ndarray對象、Series對象?!纠?0.5】由字典創(chuàng)建DataFrame對象。參數(shù)data為字典,字典值為列表,index參數(shù)省略。字典的鍵成為DataFrame對象的列索引。運行結(jié)果ab013124Pandas數(shù)據(jù)對象的創(chuàng)建第十章10.1.2【例10.6】DataFrame對象創(chuàng)建(字典鍵對應(yīng)的值為ndarray對象)。運行結(jié)果ab00.4462000.44106210.1391150.893233Pandas數(shù)據(jù)對象的創(chuàng)建第十章10.1.2【例10.7】DataFrame對象創(chuàng)建(字典鍵對應(yīng)值為Series對象)。運行結(jié)果onetwo00.1508130.71030610.9781260.2298492NaN0.784171

字典的值Series不等長時,會用NaN填補Pandas數(shù)據(jù)對象的創(chuàng)建第十章10.1.2當(dāng)從字典組成的列表創(chuàng)建DataFrame對象時,字典的鍵仍舊會作為列索引。如果字典之間的鍵不同,最終生成的DataFrame對象的列索引是所有字典鍵的并集。數(shù)據(jù)缺失的位置補充NaN。如例10.8所示?!纠?0.8】由字典列表創(chuàng)建DataFrame對象。運行結(jié)果onethreetwo01NaN21520.010Pandas數(shù)據(jù)對象的創(chuàng)建第十章10.1.2可以通過參數(shù)index和columns設(shè)置行索引和列索引,如例10.9所示?!纠?0.9】DataFrame對象創(chuàng)建(設(shè)置行索引和列索引)。運行結(jié)果abcone123two456Pandas數(shù)據(jù)對象的創(chuàng)建第十章10.1.2也可以從字典組成的字典創(chuàng)建DataFrame對象,即字典鍵所對應(yīng)的值是字典,此時字典外層鍵作為列標(biāo)簽,內(nèi)層鍵作為行標(biāo)簽。如例10.10所示,外層鍵Jack,Marry,Tom為生成DataFrame對象e的列標(biāo)簽,內(nèi)層鍵math,English,art為行標(biāo)簽?!纠?0.10】由字典組成的字典創(chuàng)建DataFrame對象。運行結(jié)果JackMarryTomart7892NaNenglish899567.0math908278.0Pandas數(shù)據(jù)對象的創(chuàng)建第十章10.1.2(3)通過讀取數(shù)據(jù)創(chuàng)建Pandas對象。Pandas提供了一些用于將表格型數(shù)據(jù)讀取為DataFrame對象的函數(shù)。其中最常用的函數(shù)為read_csv()、read_table()和read_excel()。read_csv()函數(shù)從文件、URL、文件型對象中加載帶分隔符的數(shù)據(jù),默認(rèn)分隔符為逗號;read_table()函數(shù)從文件、URL、文件型對象中加載帶分隔符的數(shù)據(jù),默認(rèn)分隔符為制表符。read_excel()函數(shù)讀取Excel文件,支持?jǐn)U展名為xls、xlsx、xlsm、xlsb、odf、ods和odt的文件。Pandas數(shù)據(jù)對象的創(chuàng)建第十章10.1.2read_csv()和read_table()函數(shù)共有的主要參數(shù)為:(1)path:值為字符串。表示文件對象的位置、文件URL等;(2)sep:值為字符串。一般單個字符,用于對行中字段進(jìn)行拆分;(3)header:整數(shù)。用做列名的行號,默認(rèn)為0(第一行),若原始數(shù)據(jù)無header行,設(shè)為None;(4)names:用做列名的列表,結(jié)合header=None;(5)skiprows:需要忽略的行數(shù),或者需要跳過的行號列表;(6)nrows:需要讀取的行數(shù)(從文件開始處算起)。read_excel()函數(shù)的主要參數(shù)有:(1)io:表示文件系統(tǒng)位置、URL、文件型對象的字符串;(2)sheet_name:字符串、數(shù)字或者列表,字符串表示數(shù)據(jù)所在的工作表名稱;數(shù)字表示工作表索引;列表表示讀取多個工作表,列表元素可以是工作表索引或名稱。(3)header:同read_csv()和read_table();(4)names:同read_csv()和read_table()。Pandas數(shù)據(jù)對象的創(chuàng)建第十章10.1.2【例10.11】從文件創(chuàng)建Pandas對象。IDSepallengthSepalwidthPetallengthPetalwidthSpecies015.13.51.40.2Iris-setosa124.93.01.40.2Iris-setosa234.73.21.30.2Iris-setosa344.63.11.50.2Iris-setosa455.03.61.40.2Iris-setosapandas.core.frame.DataFrame運行結(jié)果運行結(jié)果Pandas數(shù)據(jù)對象的索引第十章10.1.3Pandas數(shù)據(jù)對象Series和DataFrame由于結(jié)構(gòu)略有不同,索引操作略有不同。根據(jù)索引方式不同,Series數(shù)據(jù)對象的索引可以采用行索引(index)、下標(biāo)值、布爾值;DataFrame數(shù)據(jù)對象的索引可以采用行索引(index)、列索引(columns)、布爾值等進(jìn)行索引。索引符號與NumPy相同,為英文方括號[]。由于Series對象和DataFrame對象顯式的行索引(index)和下標(biāo)值在索引時容易混淆,因此,在本章中約定在提到行索引時,即為顯式設(shè)置的行索引(index);提到下標(biāo)值時,為從0開始的行編號。對于Series對象,當(dāng)索引單個值時,可以采用行索引,也可以采用下標(biāo)值。

Pandas數(shù)據(jù)對象的索引第十章10.1.3【例10.12】Series對象索引-索引單個值。a0b1c2d3dtype:int321運行結(jié)果1Pandas數(shù)據(jù)對象的索引第十章10.1.3Series對象索引多個值類似NumPy中ndarray對象切片,同樣需要用冒號(:)指定索引的起始和終止位置。例10.13為索引Series對象多個值。【例10.13】索引Series對象連續(xù)多個值。a0b1c2d3dtype:int32a0b1c2dtype:int32Pandas數(shù)據(jù)對象的索引第十章10.1.3當(dāng)索引Series對象位置不連續(xù)的多個值時,需要采用列表對索引位置進(jìn)行組合。如例10.14所示。例10.14】索引Series對象位置不連續(xù)多個值。a0b1d3dtype:int32b1d3dtype:int32Pandas數(shù)據(jù)對象的索引第十章10.1.3當(dāng)需要索引滿足特定條件的數(shù)據(jù)時,可以采用布爾型索引,布爾型索引會保留滿足設(shè)定條件的數(shù)據(jù)。如例10.15所示。【例10.15】Series對象的布爾型索引。aFalsebFalsecFalsedTruedtype:boolds[ds>2]#返回布爾值的Series對象#采用布爾型索引Series對象d3dtype:int32Pandas數(shù)據(jù)對象的索引第十章10.1.3DataFrame對象索引時,索引符號[]中是顯式索引時,默認(rèn)索引列。如例10.16所示,數(shù)據(jù)行列標(biāo)簽相同,當(dāng)索引符號中是顯式索引時,索引的是列?!纠?0.16】采用顯式索引進(jìn)行DataFrame對象索引。Beijing0Shanghai4Shenzhen8Guangzhou12Name:Beijing,dtype:int32運行結(jié)果Pandas數(shù)據(jù)對象的索引第十章10.1.3當(dāng)索引符號中為單個索引值且未進(jìn)行組合時,返回結(jié)果是Series,當(dāng)該單個索引進(jìn)行了組合,即組成了列表,此時索引返回結(jié)果為DataFrame對象,如例10.17所示。【例10.17】DataFrame對象索引的單列索引。a0b4c8d12Name:Beijing,dtype:int32pandas.core.series.Seriespandas.core.frame.DataFrame當(dāng)索引單個列且列索引為單個值時,返回結(jié)果類型是Series當(dāng)索引單個列且列索引被組合時,返回結(jié)果類型是DataFramePandas數(shù)據(jù)對象的索引第十章10.1.3當(dāng)索引DataFrame對象的多個列時,索引符號中是多個列索引組成的列表。如例10.18所示。【例10.18】DataFrame對象的多列索引。運行結(jié)果BeijingShanghaia01b45c89d1213Pandas數(shù)據(jù)對象的索引第十章10.1.3如果需要索引行,則需要采用下標(biāo)值,且此時索引符號中不能是單個數(shù)字。該方法返回結(jié)果是DataFrame。【例10.19】DataFrame對象索引-索引行。Pandas數(shù)據(jù)對象的索引第十章10.1.3如果需要采用顯式的行索引獲取行,需要采用DataFrame數(shù)據(jù)對象的loc方法。loc方法用法與前述列索引類似,可以索引單行,也可以索引多行,請見例10.20?!纠?0.20】采用行索引和loc方法索引DataFrame對象。Beijing0Shanghai1Shenzhen2Guangzhou3Name:a,dtype:int32BeijingShanghaiShenzhenGuangzhoua0123b4567BeijingShanghaiShenzhenGuangzhoua0123b4567c891011Pandas數(shù)據(jù)對象的索引第十章10.1.3loc方法除了支持顯式的行索引(index),也支持默認(rèn)下標(biāo)值(從0開始的自然數(shù))索引,但是此時DataFrame對象不能顯式的指定行索引。如例10.21所示,df1未設(shè)置index參數(shù)?!纠?0.21】采用下標(biāo)值和loc方法索引DataFrame對象。Pandas數(shù)據(jù)對象的索引第十章10.1.3當(dāng)DataFrame對象有自定義的行索引(index),同時又需要采用默認(rèn)的下標(biāo)值索引時,可以采用DataFrame數(shù)據(jù)對象的iloc方法,該方法索引方式與列表、NumPy數(shù)組索引類似?!纠?0.22】iloc方法索引DataFrame對象。BeijingShanghaiShenzhenGuangzhoua0123b4567BeijingShanghaiShenzhenGuangzhoub4567c891011BeijingShanghaiShenzhenGuangzhoua0123c891011Beijing0Shanghai1Shenzhen2Guangzhou3Name:a,dtype:int32Pandas數(shù)據(jù)對象的索引第十章10.1.3DataFrame數(shù)據(jù)對象也可以采用布爾型索引,方法與Series布爾型索引類似?!纠?0.23】DataFrame對象的布爾索引。df2[df2<7]表示索引df2中值小于7的數(shù)據(jù),值大于7的位置填補為NaN。df2[df2[['Beijing','Shanghai']]>3]表示先索引'Beijing','Shanghai'兩列,然后索引該兩列中值大于3的數(shù)據(jù)。

BeijingShanghaiShenzhenGuangzhoua0.01.02.03.0b4.05.06.0NaNcNaNNaNNaNNaNdNaNNaNNaNNaNBeijingShanghaiShenzhenGuangzhouaNaNNaNNaNNaNb4.05.0NaNNaNc8.09.0NaNNaNd12.013.0NaNNaNPandas數(shù)據(jù)對象的索引第十章10.1.3多重索引可以同時索引行和列,索引時先選擇列再選擇行。如例10.24?!纠?0.24】DataFrame對象的多重索引。a0c8Name:Beijing,dtype:int32BeijingShanghaiShenzhenGuangzhouc891011d12131415Shanghai13Guangzhou15Name:d,dtype:int32Pandas數(shù)據(jù)預(yù)處理操作第十章10.2數(shù)據(jù)分析和建模方面的大量工作是建立在數(shù)據(jù)預(yù)處理基礎(chǔ)之上,主要包括不同數(shù)據(jù)集數(shù)據(jù)的合并、數(shù)據(jù)去重及替換、缺失值處理、數(shù)據(jù)離散化等。Pandas庫提供了一組靈活和高效的核心函數(shù)和算法,可以快速、方便的進(jìn)行數(shù)據(jù)預(yù)處理操作。數(shù)據(jù)合并第十章10.2.1數(shù)據(jù)分析時,經(jīng)常需要處理來自不同數(shù)據(jù)源的數(shù)據(jù),需要先對此類數(shù)據(jù)進(jìn)行合并。數(shù)據(jù)合并指不同數(shù)據(jù)集的行或列連接起來。常用到的方法有merge()、join()、concat()以及combine_first()等。(1)merge()方法:通過一個或多個鍵將列連接起來,可以實現(xiàn)類似數(shù)據(jù)庫風(fēng)格的合并。其語法格式為:pd.merge(left,right,how='inner',on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=True,suffixes=('_x','_y'))其中:left和right分布指定參與合并的左側(cè)和右側(cè)DataFrame數(shù)據(jù)對象;how指定合并方式,合并方式有'inner'、'outer'、'left'、'right'。默認(rèn)為'inner';on:指定作為連接鍵的列名,默認(rèn)為兩個DataFrame中相同的列名;left_on:左側(cè)DataFrame中用作連接的鍵;right_on:右側(cè)DataFrame中用作連接的鍵;left_index和right_index:指定是否以索引作為鍵;sort:根據(jù)連接鍵對合并后的數(shù)據(jù)進(jìn)行排序,默認(rèn)為True;suffixes:字符串值元組。用于追加到重疊列名后的后綴,默認(rèn)為('_x','_y')。例如如果兩個DataFrame都有data列且data列沒有作為鍵,則合并結(jié)果中為列名為'data_x','data_y'。

數(shù)據(jù)合并第十章10.2.1【例10.25】merge()方法應(yīng)用示例。IDnameclass02b0aIDname_leftclassname_right02b0ab運行結(jié)果運行結(jié)果數(shù)據(jù)合并第十章10.2.1另一個數(shù)據(jù)集合并方法是join(),join()方法用法與merge()函數(shù)類似,但是join()是DataFrame數(shù)據(jù)對象的方法,需要DataFrame數(shù)據(jù)對象調(diào)用且默認(rèn)以index作為連接鍵。其語法格式為:df.join(other,on=None,how='left',lsuffix='',rsuffix='',sort=False)其中,df表示DataFrame數(shù)據(jù)對象實例;other表示被合并的數(shù)據(jù)對象,how的含義與merge()方法相同,默認(rèn)方式為left;lsuffix和rsuffix分別指定左表(df)和右表(other)重復(fù)列名的后綴,當(dāng)兩個數(shù)據(jù)存在重復(fù)列名時需要指定lsuffix和rsuffix。數(shù)據(jù)合并第十章10.2.1【例10.26】join()方法應(yīng)用示例。SepallengthSpecieskeya5.1Iris-setosab4.9Iris-setosab4.7Iris-setosac4.6Iris-setosad5.0Iris-setosaPetallengthSpecieskey01.4Iris-setosaa11.4Iris-setosaa21.3Iris-setosab31.5Iris-setosac41.4Iris-setosaePetallengthSpecies_leftkeySepallengthSpecies_right01.4Iris-setosaa5.1Iris-setosa11.4Iris-setosaa5.1Iris-setosa21.3Iris-setosab4.9Iris-setosa21.3Iris-setosab4.7Iris-setosa31.5Iris-setosac4.6Iris-setosa41.4Iris-setosaeNaNNaN運行結(jié)果數(shù)據(jù)合并第十章10.2.1數(shù)據(jù)合并的函數(shù)還有concat(),該函數(shù)可以自定義在哪個軸上進(jìn)行合并.pd.concat(objs,axis=0,join='outer',ignore_index=False,keys=None)其中,objs表示Series或DataFrame數(shù)據(jù)組成的列表或元組;axis表示合并連接的軸,對于二維DataFrame,值為0表示面向行合并,值為1表示面向列合并,默認(rèn)為0。join的值為'outer'和'inner',當(dāng)為'outer'時,表示軸向上索引的并集,當(dāng)為'inner'時,表示軸向上索引的交集。默認(rèn)為'outer'。

數(shù)據(jù)合并第十章10.2.1【例10.27】concat()函數(shù)應(yīng)用示例。PetallengthPetalwidthSepallengthSepalwidthSpecies0NaNNaN5.13.5Iris-setosa1NaNNaN4.93.0Iris-setosa2NaNNaN4.73.2Iris-setosa01.40.2NaNNaNIris-setosa11.30.2NaNNaNIris-setosa21.40.2NaNNaNIris-setosa運行結(jié)果數(shù)據(jù)合并第十章10.2.1【例10.28】concat()函數(shù)面向列合并。SepallengthSepalwidthSpeciesPetallengthPetalwidthSpecies05.13.5Iris-setosa1.40.2Iris-setosa14.93.0Iris-setosa1.30.2Iris-setosa24.73.2Iris-setosa1.40.2Iris-setosa運行結(jié)果數(shù)據(jù)合并第十章10.2.1如果設(shè)置拼接方式,可以設(shè)置join參數(shù)的值,如例10.29。SepallengthSepalwidthSpeciesPetallengthPetalwidthSpecies05.13.5Iris-setosa1.40.2Iris-setosa14.93.0Iris-setosa1.30.2Iris-setosa24.73.2Iris-setosa1.40.2Iris-setosa【例10.29】concat()函數(shù)的join參數(shù)。運行結(jié)果數(shù)據(jù)去重及替換第十章10.2.2數(shù)據(jù)分析時經(jīng)常遇到數(shù)據(jù)重復(fù)的問題,需要進(jìn)行去重處理。在Pandas庫里,去除重復(fù)數(shù)據(jù)常用的方法是duplicated()和drop_duplicates()。duplicated()方法用于判斷行數(shù)據(jù)是否重復(fù),默認(rèn)某兩行數(shù)據(jù)所有值都相同時為重復(fù),drop_duplicates()方法用于刪除重復(fù)行。這兩個方法均為DataFrame數(shù)據(jù)對象的方法。數(shù)據(jù)去重及替換第十章10.2.2【例10.30】數(shù)據(jù)去重duplicated()和drop_duplicates()方法使用示例。0False1False2True3True4Falsedtype:boolIDSepallengthSepalwidthPetallengthPetalwidthSpecies01.05.13.51.40.2Iris-setosa12.04.93.01.40.2Iris-setosa43.04.73.21.30.2Iris-setosaIDSepallengthSepalwidthPetallengthPetalwidthSpecies01.05.13.51.40.2Iris-setosa12.04.93.01.40.2Iris-setosa43.04.73.21.30.2Iris-setosa可以通過設(shè)置參數(shù)來限定以哪些列作為判定是否重復(fù)的依據(jù),本例以'Sepallength'列作為依據(jù),如果某一行'Sepallength'列的值與另一行相同,即為重復(fù)行。數(shù)據(jù)去重及替換第十章10.2.2數(shù)據(jù)的替換主要指將數(shù)據(jù)值替換為其他值,常用的方法是replace(),該方法是Series或DataFrame數(shù)據(jù)對象的方法。其語法格式為:df.replace(to_replace=None,value=None,inplace=False,limit=None)其中,df表示DataFrame數(shù)據(jù)對象實例;to_replace表示要替換的值或模式;value:替換成的值;inplace表示是否要改變原數(shù)據(jù),F(xiàn)alse為不改變,True為改變,默認(rèn)為False;limit表示設(shè)置替換的次數(shù)。To_replace和value參數(shù)在傳入時有多種不同的寫法,可以是單個值,也可以是列表或者字典。如果是列表,to_replace參數(shù)和value參數(shù)兩個列表的值一一對應(yīng);如果是字典,字典的鍵表示要替換的值,字典的值表示要替換成的值。具體用法參見例10.31。數(shù)據(jù)去重及替換第十章10.2.2【例10.31】數(shù)據(jù)替換replace()方法使用示例。0100.01100.021.331.54100.051.7Name:Petallength,dtype:float64運行結(jié)果將1.4替換成1000100.01100.021.33200.04100.051.7Name:Petallength,dtype:float64將1.4和1.5分別替換成100和200,有兩種寫法:(1)列表形式;(2)字典形式運行結(jié)果或數(shù)據(jù)缺失值處理第十章10.2.3數(shù)據(jù)分析中對缺失值的處理一般有2種方式:一是直接丟棄缺失數(shù)據(jù),丟棄缺失數(shù)據(jù)方法為dropna();二是對缺失值進(jìn)行填補,缺失值填補方法為fillna()。(1)dropna()的用法。df.dropna(axis=0,how='any',inplace=False)df表示DataFrame數(shù)據(jù)對象。axis的值為0或1,值為

0表示刪除包含缺失值的行;值為1表示刪除包含缺失值的列,默認(rèn)為0。how的值為'any'和'all','any'表示只要存在缺失值就刪除該行或列;'all'表示所有值均為缺失值才刪除該行或列,默認(rèn)為'any'。inplace的值為布爾型,默認(rèn)為False,如果為True,則在原數(shù)據(jù)上執(zhí)行刪除操作并返回None。

數(shù)據(jù)缺失值處理第十章10.2.3【例10.32】dropna()方法使用示例。所有行都有缺失值,返回結(jié)果為空的DataFrameEmptyDataFrameColumns:[Sepallength,Sepalwidth,Species,Shape]Index:[]刪除全部為缺失值的行SepallengthShape05.1NaN24.7NaNSepallengthShape05.1NaN1NaNNaN24.7NaN運行結(jié)果運行結(jié)果運行結(jié)果數(shù)據(jù)缺失值處理第十章10.2.3【例10.32】dropna()方法使用示例(續(xù))Sepallength05.11NaN24.7刪除全部為缺失值的列直接在數(shù)據(jù)對象df上進(jìn)行刪除操作Sepallength05.11NaN24.7運行結(jié)果運行結(jié)果數(shù)據(jù)缺失值處理第十章10.2.3(2)fillna()的用法。df.fillna(value=None,method=None,axis=None,inplace=False,limit=None)其中,df表示DataFrame數(shù)據(jù)對象;value表示用于填充缺失值的值。method表示填充方向,值為'backfill','bfill','pad','ffill',None,backfill和bfill表示后向填充,即用缺失值的后一個值填充;pad和ffill表示前向填充,即用缺失值的前一個值填充。limit值為整數(shù),如果指定了method,表示連續(xù)的缺失值的前向/后向填充的最大數(shù)量。參數(shù)axis和inplace與dropna()方法的該兩個參數(shù)用法一致。數(shù)據(jù)缺失值處理第十章10.2.3【例10.33】缺失值處理fillna()方法使用示例。SepallengthSepalwidthSpeciesShape05.13.5Iris-setosaNaN1NaN3.0Iris-setosaNaN24.73.2Iris-setosaNaNSepallengthSepalwidthSpeciesShape05.13.5Iris-setosa缺失值1缺失值3.0Iris-setosa缺失值24.73.2Iris-setosa缺失值用'缺失值‘三個字填補缺失值運行結(jié)果運行結(jié)果數(shù)據(jù)缺失值處理第十章10.2.3【例10.33】缺失值處理fillna()方法使用示例SepallengthSepalwidthSpeciesShape05.13.5Iris-setosaNaN14.73.0Iris-setosaNaN24.73.2Iris-setosaNaNSepallengthSepalwidthSpeciesShape05.13.5Iris-setosaNaN15.13.0Iris-setosaNaN24.73.2Iris-setosaNaN前向填充后向填充運行結(jié)果運行結(jié)果數(shù)據(jù)缺失值處理第十章10.2.3除了采用前向填充和后向填充,也可以用字典的方式填充,這種方式需要自行設(shè)置填充的值,如例10.34所示,將Sepallength字段的缺失值用100填補,Shape字段的缺失值用circle填補?!纠?0.34】缺失值處理fillna()方法的字典填補。SepallengthSepalwidthSpeciesShape05.13.5Iris-setosacircle1100.03.0Iris-setosacircle24.73.2Iris-setosaNaNSepallengthSepalwidthSpeciesShape05.13.5Iris-setosacircle1100.03.0Iris-setosacircle24.73.2Iris-setosacircle運行結(jié)果運行結(jié)果數(shù)據(jù)離散化第十章10.2.4數(shù)據(jù)離散化主要指將連續(xù)數(shù)據(jù)進(jìn)行分箱,使數(shù)值隸屬于不同的離散區(qū)間。Pandas中連續(xù)數(shù)據(jù)離散化的方法主要有cut()和qcut()。cut()函數(shù)的語法格式如下:pd.cut(x,bins,right=True,labels=None)其中,x表示要離散化的數(shù)據(jù),支持列表、一維數(shù)組或Series;bins表示離散化方式,常用的有2種:一是給定整數(shù)n,離散化成n個等寬區(qū)間,寬度為(max-min)/n;二是自定義區(qū)間,例如給定常量序列[1,2,5,10],則離散成(1,2],(2,5],(5,10]三個區(qū)間。right值為True或者False,指定面元區(qū)間bins左右開閉情況,默認(rèn)True左開右閉,F(xiàn)alse為左閉右開。labels表示離散化的各個區(qū)間的標(biāo)簽,數(shù)組長度需要與區(qū)間個數(shù)相等,默認(rèn)為區(qū)間。

數(shù)據(jù)離散化第十章10.2.4【例10.35】cut()函數(shù)應(yīng)用示例。0NaN1a2a3a4bdtype:categoryCategories(2,object):[a<b]0[1.0,3.0)1[1.0,3.0)2[3.0,5.004)3[3.0,5.004)4[3.0,5.004)dtype:categoryCategories(2,interval[float64]):[[1.0,3.0)<[3.0,5.004)]離散化為等寬的2個區(qū)間運行結(jié)果自定義區(qū)間離散化運行結(jié)果數(shù)據(jù)離散化第十章10.2.4qcut()函數(shù)可以進(jìn)行分位數(shù)分箱,每個區(qū)間的數(shù)據(jù)個數(shù)大致相同。qcut()函數(shù)的語法格式為:pd.qcut(x,q,labels=None)x和labels的用法與cut()方法一致;q是給定分位數(shù),如果為整數(shù)n,表示n分位數(shù),如10表示十分位數(shù);也可以是分位數(shù)數(shù)組,例如:[0,0.2,0.4,0.75,1.0]?!纠?0.36】qcut()方法使用示例。0(0.999,1.8]1(1.8,2.6]2(2.6,3.4]3(3.4,4.2]4(4.2,5.0]dtype:categoryCategories(5,interval[float64]):[(0.999,1.8]<(1.8,2.6]<(2.6,3.4]<(3.4,4.2]<(4.2,5.0]]0(0.999,2.6]1(0.999,2.6]2(2.6,4.2]3(2.6,4.2]4(4.2,5.0]dtype:categoryCategories(3,interval[float64]):[(0.999,2.6]<(2.6,4.2]<(4.2,5.0]]One-hot編碼第十章10.2.5One-Hot編碼又稱為一位有效編碼,編碼結(jié)果也稱為啞變量矩陣(dummymatrix)。在數(shù)據(jù)分析中,通常需要對分類變量進(jìn)行One-Hot編碼以方便距離或相似度的計算。例如:某個數(shù)據(jù)中性別屬性的值有Female和Male兩個,One-Hot編碼時生成Female和Male兩列,對于某條記錄,如果性別屬性值為Female,則在啞變量矩陣中Female列為1,Male列為0,以此類推。如表10.1所示數(shù)據(jù),表10.2為該數(shù)據(jù)的One-Hot編碼結(jié)果。ID性別年齡01Female1802Male19表10.1原數(shù)據(jù)IDFemaleMale年齡011018020119表10.2One-Hot編碼后數(shù)據(jù)One-hot編碼第十章10.2.5Pandas庫中的get_dummies()函數(shù)可以實現(xiàn)分類變量的One-hot編碼。blueredwhite0010110020013010【例10.37】get_dummies()方法進(jìn)行One-Hot編碼運行結(jié)果One-hot編碼第十章10.2.5【例10.38】one-hot編碼操作小技巧ab010110210301401pd.get_dummies(pd.cut(Sepal,2,labels=['a','b']))代碼首先對Sepal數(shù)據(jù)分箱,并指定2個箱子的標(biāo)簽為'a'和'b',然后對離散化后的數(shù)據(jù)進(jìn)行One-Hot編碼。運行結(jié)果數(shù)據(jù)統(tǒng)計基礎(chǔ)第十章10.3在數(shù)據(jù)集準(zhǔn)備好之后,通常的任務(wù)就是計算分組統(tǒng)計或生成透視表,Pandas提供了一個靈活高效的groupby()方法,能夠以一種自然的方式對數(shù)據(jù)集進(jìn)行切片、切塊等操作。groupby()方法返回DataFrameGroupBy對象類型,該類型可以調(diào)用計算方法對分組的數(shù)據(jù)進(jìn)行各類統(tǒng)計計算,具體例子見10.39。數(shù)據(jù)統(tǒng)計基礎(chǔ)第十章10.3【例10.39】groupby()方法使用示例。total_billtipsizesexFemale18.0568972.8334482.459770Male20.7440763.0896182.630573total_billtipsexsmokerdaytimesize016.991.01Female

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論