Python程序設計基礎 課件 第10章 Python數(shù)據(jù)工程與可視化_第1頁
Python程序設計基礎 課件 第10章 Python數(shù)據(jù)工程與可視化_第2頁
Python程序設計基礎 課件 第10章 Python數(shù)據(jù)工程與可視化_第3頁
Python程序設計基礎 課件 第10章 Python數(shù)據(jù)工程與可視化_第4頁
Python程序設計基礎 課件 第10章 Python數(shù)據(jù)工程與可視化_第5頁
已閱讀5頁,還剩117頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第十章Python數(shù)據(jù)工程與可視化

1網(wǎng)絡爬蟲是自動進行HTTP訪問并捕獲HTML頁面的程序或腳本。Python語言提供了多個具備網(wǎng)絡爬蟲功能的第三方庫,比如Requests、BeautifulSoup、Scrapy、PyQuery等。網(wǎng)絡爬蟲1Requests庫是一個非常簡潔且簡單的處理HTTP請求的第三方庫,其最大優(yōu)點是程序編寫過程接近URL訪問過程。Requests庫支持非常豐富的鏈接訪問功能,包括國際域名和URL獲取、HTTP長連接和連接緩存,HTTP會話和cookie保持,瀏覽器使用風格的SSL驗證、基本的摘要認證、有效的鍵值對cookie記錄、自動解壓縮、自動內(nèi)容解碼、文件分塊上傳、HTTP(S)代理功能、連接超時處理和流數(shù)據(jù)下載等。requests的安裝命令如下:pipinstallrequests1.1Requests網(wǎng)絡爬蟲1requests庫提供了7個函數(shù),用來表示網(wǎng)頁的HTTP請求,如表10-1所示。1.1Requests網(wǎng)絡爬蟲函數(shù)說明requests.request()構(gòu)造一個請求,支持以下各種方法的基礎方法requests.get()獲取HTML網(wǎng)頁信息的主要方法requests.head()獲取HTML網(wǎng)頁頭信息的方法requests.post()向HTML網(wǎng)頁提交POST請求方法requests.put()向HTML網(wǎng)頁提交PUT請求方法requests.patch()向HTML網(wǎng)頁提交局部修改請求requests.delete()向HTML網(wǎng)頁提交刪除請求表10-1HTTP的7種請求1Requests庫支持使用帶參URL,為了請求特定的數(shù)據(jù),需要在URL查詢字符串中加入某些特定數(shù)據(jù),一般構(gòu)建URL,數(shù)據(jù)會放在一個問號后面,并且以鍵值的形式放在URL中。如:/get?name=xiaoming&password=123。Requests庫支持定制請求頭。HTTP標頭(Header)允許客戶端和服務器通過HTTP請求(request)或者響應(response)傳遞附加信息。一個HTTP標頭由它的名稱(不區(qū)分大小寫)后跟隨一個冒號,冒號后跟隨它具體的值。Requests并不能根據(jù)定制的請求頭Headers的具體情況而改變自己的行為,只是在請求的最后,將所有的請求頭信息都傳遞進去。1.1Requests網(wǎng)絡爬蟲1Requests庫支持重定向。通過各種方法將各種網(wǎng)絡請求重新定個方向轉(zhuǎn)到其它位置(如:網(wǎng)頁重定向、域名的重定向、路由選擇的變化也是對數(shù)據(jù)報文經(jīng)由路徑的一種重定向)。在Requests中,重定向只需要設置allow_redirects參數(shù),設置為True為允許重定向,設置False為禁止重定向,默認為True。Requests庫支持請求超時。有時網(wǎng)絡爬蟲會遇到服務器長時間不返回請求,這時爬蟲程序就會一直等待,導致爬蟲程序不能順利執(zhí)行。在Requests中有一個timeout參數(shù)設定爬蟲請求時間,當?shù)却龝r間超過設定timeout參數(shù),爬蟲會自動結(jié)束請求。timeout參數(shù)默認為0,即沒有超時。1.1Requests網(wǎng)絡爬蟲1Requests在完成請求后,會返回一個Response對象,該對象包含多種信息如表10-2所示。1.1Requests網(wǎng)絡爬蟲屬性說明apparent_encoding服務器內(nèi)容使用的文本編碼content返回響應的內(nèi)容,以字節(jié)為單位headers返回響應頭,字典格式jsonrequests中內(nèi)置的Json解碼器reason響應狀態(tài)的描述,比如"NotFound"或"OK"status_code返回HTTP的狀態(tài)碼text返回服務器的內(nèi)容,會自動根據(jù)相應頭部的字符編碼進行解碼url相應的URL表10-2Response對象返回信息1>>>importrequests>>>user_agent="Mozilla/5.0(WindowsNT10.0;Win64;x64) AppleWebKit/537.36/(KHTML,likeGecko)Chrome/Safari/537.36">>>headers={'User-Agent':user_agent}>>>res=requests.get('/',headers=headers,timeout=2)>>>res.apparent_encoding #服務器編碼'utf-8'>>>res.reason #響應狀態(tài)'OK'>>>res.status_code #HTTP狀態(tài)碼200>>>res.url #URL'/'示例:使用Requests庫中GET請求訪問百度官網(wǎng)網(wǎng)絡爬蟲1beautifulsoup4庫,也稱為BeautifulSoup庫或bs4庫,用于解析和處理HTML和XML。它的最大優(yōu)點是能根據(jù)HTML和XML語法建立解析樹,進而高效解析其中的內(nèi)容。HTML建立的Web頁面一般非常復雜,除了有用的內(nèi)容信息外,還包括大量用于頁面格式的元素,直接解析一個Web網(wǎng)頁需要深入了解HTML語法,而且比較復雜。beautifulsoup4庫將專業(yè)的Web頁面格式解析部分封裝成函數(shù),提供了若干有用且便捷的處理函數(shù)。1.2beautifulsoup4網(wǎng)絡爬蟲1beautifulsoup4庫采用面向?qū)ο笏枷雽崿F(xiàn),簡單地說,它把每個頁面當作一個對象,通過<a>.<b>的方式調(diào)用對象的屬性(即包含的內(nèi)容),或者通過<a>.<b>()的方式調(diào)用方法。在使用beautifulsoup4庫之前,需要進行引用,由于這個庫的名字非常特殊且采用面向?qū)ο蠓绞浇M織,可以用from-import方式從庫中直接引用BeautifulSoup類,方法如下:frombs4importBeautifulSoup1.2beautifulsoup4網(wǎng)絡爬蟲1beautifulSoup4庫中最主要的是BeautifulSoup類,每個實例化的對象相當于一個頁面,導入BeautifulSoup類后,使用BeautifulSoup()創(chuàng)建一個BeautifulSoup對象。BeautifulSoup支持的HTML解析器有四種,Python標準庫、lxmlHTML解析器、lxmlXML解析器和html5lib解析器,常用的是lxmlHTML解析器。1.2beautifulsoup4網(wǎng)絡爬蟲1本文自建一個HTML示例文件books.html文件,通過對books.html文件的過濾操作,演示beautifulSoup4庫解析HTML文件。1.2beautifulsoup4網(wǎng)絡爬蟲1beautifulSoup4庫中最主要的是BeautifulSoup類,每個實例化的對象相當于一個頁面,導入BeautifulSoup類后,使用BeautifulSoup()創(chuàng)建一個BeautifulSoup對象。1.2beautifulsoup4網(wǎng)絡爬蟲>>>frombs4importBeautifulSoup>>>html_doc='D:\python\ch10\books.html'>>>soup=BeautifulSoup(open(html_doc),'lxml')>>>type(soup) #打印soup類型<class'bs4.BeautifulSoup'>1創(chuàng)建的BeautifulSoup對象是一個樹形結(jié)構(gòu),它包含HTML頁面中的每一個Tag(標簽)元素,如<head>、<body>、<title>等。HTML中的結(jié)構(gòu)轉(zhuǎn)化BeautifulSoup對象的一個屬性,可以采用<a>.<b>形式獲取,其中<b>的名字采用HTML中標簽的名字。BeautifulSoup對象常用的屬性見表10-3。1.2beautifulsoup4網(wǎng)絡爬蟲屬性描述headHTML頁面中的<head>內(nèi)容titleHTML頁面中的<title>內(nèi)容,一般在<head>內(nèi)部bodyHTML頁面中的<body>內(nèi)容pHTML頁面中第一個<p>內(nèi)容stringsHTML頁面所有呈現(xiàn)在Web上的字符串(標簽內(nèi)容)stripped_stringsHTML頁面所有呈現(xiàn)在Web上的非空格字符串表10-3BeautifulSoup對象常用的屬性1獲取books.html文件中的head、title、body中內(nèi)容。1.2beautifulsoup4網(wǎng)絡爬蟲#打印head中內(nèi)容>>>soup.head <head><metacharset="utf-8"/><title>教材匯總</title><metacontent="教材匯總"name="description"/></head>

#打印body中內(nèi)容>>>soup.body<body><ahref="book1_url"id="book1">高等數(shù)學</a><ahref="book2_url"id="book2">實用大學英語教程綜合訓練1</a><ahref="book3_url"id="book3">C語言程序設計</a></body>#打印title中內(nèi)容>>>soup.title <title>教材匯總</title>1每一個Tag標簽在beautifulSoup4庫中也是一個對象,稱為Tag對象。每一個標簽對象在HTML中都有類似的結(jié)構(gòu):<ahref="book1_url"id="book1">高等數(shù)學</a>其中,尖括號(<>)中的標簽的名字是name,尖括號內(nèi)其它項是attrs,尖括號之間的內(nèi)容是string。因此,通過Tag對象的name、attrs和string屬性來獲取相應的內(nèi)容。標簽對象有4個常用的屬性。如表10-4所示。1.2beautifulsoup4網(wǎng)絡爬蟲11.2beautifulsoup4網(wǎng)絡爬蟲屬性描述name字符串類型,標簽的名字,如a,divattrs字典類型,包含Tag下所有的屬性,如hrefstring字符串類型,Tag所包含的文本內(nèi)容,顯示到Web的內(nèi)容contents列表類型,Tag下所有子Tag的內(nèi)容表10-4標簽對象4個常用屬性11.2beautifulsoup4網(wǎng)絡爬蟲示例:獲取標簽屬性>>>soup.a<ahref="book1_url"id="book1">高等數(shù)學</a>>>>a>>>soup.a.attrs{'href':'book1_url','id':'book1'}>>>soup.a.string高等數(shù)學>>>soup.a.contents['高等數(shù)學']11.2beautifulsoup4網(wǎng)絡爬蟲當需要列出標簽對應的所有內(nèi)容或者需要找到非第一個標簽時,需要使用BeautifulSoup的find()和find_all()方法。這兩個方法會遍歷HTML文檔,根據(jù)條件返回內(nèi)容。find_all()會根據(jù)參數(shù)返回對應的所有標簽,返回類型為列表。BeautifulSoup.find_all(name,attrs,recursive,string,limit)參數(shù)解釋:name:按照標簽名稱檢索attrs:按照標簽的屬性值檢索recursive:設置檢索層次,只查找當前標簽下一層時,設置recursive=Falsestring:按照關鍵字檢索string屬性內(nèi)容limit:返回結(jié)果的個數(shù),默認返回全部內(nèi)容11.2beautifulsoup4網(wǎng)絡爬蟲>>>soup.find_all("a") #查找所有<a>標簽[<ahref="book1_url"id="book1">高等數(shù)學</a>,<ahref="book2_url"id="book2">實用大學英語教程綜合訓練1</a>,<ahref="book3_url"id="book3">C語言程序設計</a>]#查找所有<a>標簽,并且超鏈接為book1_url>>>soup.find_all("a",attrs={"href":"book1_url"}) [<ahref="book1_url"id="book1">高等數(shù)學</a>]>>>importre #導入re模塊#查找所有包含“語”的標簽>>>soup.find_all(string=pile("語"))['實用大學英語教程綜合訓練1','C語言程序設計']11.2beautifulsoup4網(wǎng)絡爬蟲find()方法根據(jù)參數(shù)返回對應的第一個結(jié)果,其余功能和find_all()類似,因此,本文只給出find()函數(shù)的使用形式。BeautifulSoup.find(name,attrs,recursive,string)NumPy(NumericalPython)是Python中用于科學計算的一個開源庫。它提供了高效的多維數(shù)組對象以及用于處理這些數(shù)組的各種工具。NumPy是其他Python科學計算庫的基礎,包括科學計算、數(shù)據(jù)分析和機器學習等領域常用的Pandas和Scikit-learn。NumPy的主要功能之一是它的ndarray(N-dimensionalarray)對象,它是一個多維數(shù)組,支持高效的數(shù)組操作和運算。與Python內(nèi)置的列表(list)相比,NumPy的數(shù)組提供了更高的性能和更靈活的操作方式。2科學計算NumPy2科學計算NumPy安裝numpy,安裝命令為:pipinstallnumpy引用NumPy方式為importnumpyasnp:2.1數(shù)組的創(chuàng)建1).array()方法創(chuàng)建一個ndarray數(shù)組,可以調(diào)用numpy中的array()方法。np.array(object,dtype=None,order=None)object表示數(shù)組或嵌套的數(shù)列;dtype表示數(shù)組元素的數(shù)據(jù)類型,可選;order表示創(chuàng)建數(shù)組的樣式,C為行方向,F(xiàn)為列方向,A為任意方向(默認)。2科學計算NumPy示例:創(chuàng)建一個一維數(shù)組。>>>importnumpyasnp>>>arr=np.array([1,2,3])>>>a[123]2科學計算NumPy示例:創(chuàng)建一個二維數(shù)組。>>>importnumpyasnp>>>arr=np.array([[1,2,3],[4,5,6]])>>>arr[[123][456]]2).empty()方法empty()方法用來創(chuàng)建一個指定形狀(shape)、數(shù)據(jù)類型(dtype)且未初始化的數(shù)組(每次運行程序可能會產(chǎn)生不一樣的數(shù)據(jù))。np.empty(shape,dtype=int,order='C')shape表示數(shù)組形狀;dtype表示數(shù)組元素的數(shù)據(jù)類型,可選;order表示在計算機內(nèi)存中的存儲元素的順序,有”C”和”F”兩個選項,分別代表行優(yōu)先和列優(yōu)先。2科學計算NumPy>>>importnumpyasnp>>>arr=np.empty([3,2],dtype=int)>>>arr[[1382733280570][1382874480570][1381966664570]]3).zeros()方法zeros()方法創(chuàng)建指定大小的數(shù)組,數(shù)組元素以0來填充。np.zeros(shape,dtype=float,order='C')shape表示數(shù)組的形狀;dtype表示數(shù)組元素的數(shù)據(jù)類型。2科學計算NumPy>>>importnumpyasnp>>>arr=np.zeros([3,2],dtype=int)#創(chuàng)建一個3行2列的0數(shù)組>>>arr[[00][00][00]]4).ones()方法創(chuàng)建指定形狀的數(shù)組,數(shù)組元素以1來填充。np.ones(shape,dtype=None,order='C')shape表示數(shù)組的形狀;dtype表示數(shù)組元素的數(shù)據(jù)類型。2科學計算NumPy>>>importnumpyasnp>>>arr=np.ones([3,2],dtype=int)>>>arr[[11][11][11]]5).arange()方法在指定數(shù)值范圍內(nèi)創(chuàng)建數(shù)組np.arange(start,stop,step,dtype=None)start:開始位置,默認起始值為0;stop:停止位置,不包括該位置的值;step:步長,默認步長為1,如果指定了step,則還必須給出start。dtype:輸出數(shù)組的類型。2科學計算NumPy>>>importnumpyasnp>>>arr=np.arange(1,5,2)>>>arrarray([1,3])6).linspace()方法在線性空間中以均勻步長(等差數(shù)列)生成數(shù)字序列。np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)start:序列的起始值;stop:序列的終止值,如果endpoint為True,則該值包含在序列中;num:樣本數(shù)量,默認為50;endpoint:stop終止值是否包含在該序列中,True表示stop值包含在序列中,F(xiàn)alse:不包含在序列中,默認為True;retstep:顯示間距,True表示生成的數(shù)組中會顯示間距,F(xiàn)alse表示生成的數(shù)組中不會顯示間距。2科學計算NumPy>>>importnumpyasnp>>>arr=np.linspace(start=1,stop=10,num=10,endpoint=True,retstep=False,dtype=float)>>>arrarray([1.,

2.,

3.,

4.,

5.,

6.,

7.,

8.,

9.,10.])>>>arr2=np.linspace(start=1,stop=10,num=5,endpoint=False,retstep=True,dtype=float)>>>arr2(array([1.,2.8,4.6,6.4,8.2]),1.8)2科學計算NumPyarr是采用linspace()函數(shù)在[0-10]之間生成10個浮點數(shù);arr2是采用linspace()函數(shù)在[0-10)之間生成5個浮點數(shù)并顯示間距。7).logspace()方法logspace()方法用于創(chuàng)建一個于等比數(shù)列。np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)start:序列的起始值;stop:序列的終止值,如果endpoint為True,則該值包含在序列中;num:樣本數(shù)量,默認為50;endpoint:stop終止值是否包含在該序列中,True表示stop值包含在序列中,F(xiàn)alse:不包含在序列中,默認為True;base:對數(shù)log的底數(shù)。2科學計算NumPy>>>importnumpyasnp>>>arr=np.logspace(start=0,stop=9,num=10,base=2)>>>arr[

1.

2.

4.

8.16.32.64.128.256.512.]2科學計算NumPy2.2數(shù)組的屬性數(shù)組屬性反映了數(shù)組本身固有的信息,常見的數(shù)組屬性見表10-52科學計算NumPy表10-5常見的數(shù)組屬性1).ndarray.ndim用于返回數(shù)組的維度,即秩。2科學計算NumPy>>>importnumpyasnp>>>arr=np.arange(9)#使用arange()生成一個0-8的一維數(shù)組>>>arr#打印數(shù)組[012345678]>>>arr.ndim#打印數(shù)組的秩1>>>arr_2=np.arange(9).reshape(3,3)#使用reshape()函數(shù)將一維數(shù)組并轉(zhuǎn)化為二維數(shù)組>>>arr_2[[012][345][678]]>>>arr_2.ndim22).ndarray.shape數(shù)組的維度,返回一個元組,(n,m)表示n行和m列,也可以調(diào)整數(shù)組的大小。2科學計算NumPy>>>importnumpyasnp>>>arr=np.arange(6).reshape(2,3)#使用reshape()函數(shù)生成一個2*3的數(shù)組>>>arr[[012][345]]>>>arr.shape(2,3)#調(diào)整數(shù)組的大小>>>arr.shape=(3,2)#通過shape屬性調(diào)整數(shù)組的大小>>>arr[[01][23][45]]>>>arr.shape#打印調(diào)整后數(shù)組的形狀(3,2)3).ndarray.reshape調(diào)整數(shù)組的形狀。2科學計算NumPy>>>importnumpyasnp>>>arr=np.arange(6).reshape(2,3)#生成一個2*3的數(shù)組>>>arr[[012][345]]>>>arr_2=arr.reshape(3,2)#將數(shù)組形狀由2*3調(diào)整為3*2>>>arr_2[[01][23][45]]4).ndarray.itemsize以字節(jié)的形式返回數(shù)組中每一個元素的大小。例如,一個元素的類型為float64,則它的itemsize屬性為8,float64占用64個bits,每個字節(jié)長度為8,即占用8個字節(jié)。2科學計算NumPy>>>importnumpyasnp>>>arr=np.arange(6,dtype=8).reshape(2,3)>>>arr.itemsizeint8:1>>>arr2=np.arange(6,dtype=np.float64).reshape(2,3)>>>arr2.itemsizefloat64:82.3切片與索引1)一維數(shù)組索引與切片可以采用冒號分割切片參數(shù)進行切片操作。[start:stop:step]如果只放置一個start參數(shù),如[2],將返回與該索引相對應的單個元素。2科學計算NumPyndarray對象的內(nèi)容可以通過索引或切片來訪問和修改,與Python中l(wèi)ist的切片操作類似。>>>importnumpyasnp>>>arr=np.arange(10)>>>arrarray([0,1,2,3,4,5,6,7,8,9])>>>arr[2]2[start:stop:step]如果為[2:],表示從該索引開始以后的所有項都將被提取,英文冒號(:)表示獲取所有元素。>>>arr[2:][2,3,4,5,6,7,8,9]2科學計算NumPy>>>importnumpyasnp>>>arr=np.arange(10)>>>arrarray([0,1,2,3,4,5,6,7,8,9])[start:stop:step]如果使用了三個參數(shù),如[2:8:2],則提取步長為2的兩個索引(不包括停止索引)之間的項。>>>arr[2:8:2][246]>>>importnumpyasnp>>>arr=np.arange(10)>>>arrarray([0,1,2,3,4,5,6,7,8,9])>>>arr[::-1]#設置步長為-1,翻轉(zhuǎn)數(shù)組array([9,8,7,6,5,4,3,2,1,0])>>>arr[-10:-5]array([0,1,2,3,4])2科學計算NumPynumpy數(shù)組索引與Python中List索引相似,既有正向索引也有負數(shù)索引。下面將演示負數(shù)索引。設置步長為-1翻轉(zhuǎn)數(shù)組,設置負數(shù)下表選取元素0-4。2)多維數(shù)組索引下例演示創(chuàng)建一個多維數(shù)組,可以采用arange()方法并用reshape()方法改變它的維度,使之變?yōu)橐粋€三維數(shù)組。2科學計算NumPy>>>importnumpyasnp>>>arr=np.arange(24).reshape(2,3,4)>>>arr[[[0

1

2

3]

[4

5

6

7]

[8

91011]][[12131415]

[16171819]

[20212223]]]三維的數(shù)組可以看作2個3×4的二維數(shù)組。我們可以形象的將一個三維數(shù)組理解為一個電子表格中工作表(sheet)、行和列的關系,下面均采用電子表格來講解三維數(shù)組。2)多維數(shù)組索引下例演示創(chuàng)建一個多維數(shù)組,可以采用arange()方法并用reshape()方法改變它的維度,使之變?yōu)橐粋€三維數(shù)組。2科學計算NumPy>>>importnumpyasnp>>>arr=np.arange(24).reshape(2,3,4)>>>arr[[[0

1

2

3]

[4

5

6

7]

[8

91011]][[12131415]

[16171819]

[20212223]]]三維的數(shù)組可以看作2個3×4的二維數(shù)組。我們可以形象的將一個三維數(shù)組理解為一個電子表格中工作表(sheet)、行和列的關系,下面均采用電子表格來講解三維數(shù)組。獲取指定元素:第一張工作表中,第二行、第三列元素>>>arr[0,1,2]112科學計算NumPy[[[0

1

2

3]

[4

5

6

7]

[8

91011]][[12131415]

[16171819]

[20212223]]]英文冒號(:)代替缺少值表示獲取所有元素。獲取第一張sheet中所有元素,在進行索引時可以將第一個下標可以設置為0,第二和三個下標可以用英文冒號(:)來代替。>>>arr[0,:,:][[0

1

2

3][4

5

6

7][8

91011]]多個冒號可以用一個省略號(…)來代替,下例第二和第三個下標可以用一個省略號來表示。>>>arr[0,...][[0

1

2

3][4

5

6

7][8

91011]]2科學計算NumPy[[[0

1

2

3]

[4

5

6

7]

[8

91011]][[12131415]

[16171819]

[20212223]]]在獲取第一個sheet工作表中數(shù)據(jù)后,如果還想進一步獲取行和列中的數(shù)據(jù),可以直接在獲取的二維數(shù)組中進行切片索引,也可以在原始的三維數(shù)組切片中間隔地選取元素。>>>arr_2=arr[0,...][[0

1

2

3][4

5

6

7][8

91011]]>>>arr_2[1,1]5>>>arr[0,1,::2][46]多維數(shù)組支持負數(shù)切片索引,下例獲取第一個sheet中所有元素。>>>arr[-2,...][[0

1

2

3][4

5

6

7][8

91011]]

2科學計算NumPy[[[0

1

2

3]

[4

5

6

7]

[8

91011]][[12131415]

[16171819]

[20212223]]]獲取所有sheet中的最后一個元素。>>>arr[:,-1,-1][1123]2.4數(shù)組的變換1)reshape()方法對于定義好的數(shù)組,可以通過reshape()方法改變其數(shù)據(jù)的維度。np.reshape(a,newshape)a:待處理的數(shù)組,newshape:新維度,整數(shù)或整數(shù)元組2科學計算NumPyNumPy中包含了一些數(shù)組變換的方法,可分為數(shù)組重塑、數(shù)組合并、數(shù)組分割>>>importnumpyasnp>>>arr=np.arange(9)>>>arr[012345678]>>>arr_re=arr.reshape(3,3)>>>arr_re

[[012][345][678]]2)hstack()方法實現(xiàn)數(shù)組的橫向合并。2科學計算NumPy>>>importnumpyasnp>>>arr1=np.arange(6).reshape(3,2)>>>arr1[[0,1],[2,3],[4,5]]>>>arr2=arr1*2>>>arr2[[0,

2],[4,

6],[8,10]]>>>arr3=np.hstack((arr1,arr2))>>>arr3[[0

1

0

2][2

3

4

6][4

5

810]]3)vstack()方法實現(xiàn)數(shù)組的縱向合并。2科學計算NumPy>>>importnumpyasnp>>>arr1=np.arange(6).reshape(3,2)>>>arr2=arr1*2>>>arr2>>>arr4=np.vstack((arr1,arr2))>>>arr4[[0

1][2

3][4

5][0

2][4

6][810]]4)concatenate()方法可以實現(xiàn)數(shù)組的橫向或縱向合并,參數(shù)axis=1時進行橫向合并,axis=0時進行縱向合并(默認)。2科學計算NumPy>>>importnumpyasnp>>>arr1=np.arange(6).reshape(3,2)>>>arr2=arr1*2#實現(xiàn)數(shù)組的橫向合并>>>np.concatenate((arr1,arr2),axis=1)[[0

1

0

2][2

3

4

6][4

5

810]]#實現(xiàn)數(shù)組的縱向合并>>>np.concatenate((arr1,arr2),axis=0)[[0

1][2

3][4

5][0

2][4

6][810]]5)hsplit()方法實現(xiàn)數(shù)組的橫向分割。2科學計算NumPy>>>>importnumpyasnp>>>arr=np.arange(16).reshape(4,4)>>>arrarray([[0,

1,

2,

3],[4,

5,

6,

7],[8,

9,10,11],[12,13,14,15]])>>>np.hsplit(arr,2)[array([[0,

1],[4,

5],[8,

9],[12,13]]),array([[2,

3],[6,

7],[10,11],[14,15]])]6)vsplit()方法實現(xiàn)數(shù)組的縱向分割。2科學計算NumPy>>>>importnumpyasnp>>>arr=np.arange(16).reshape(4,4)>>>np.vsplit(arr,2)[array([[0,1,2,3],[4,5,6,7]]),array([[8,

9,10,11],[12,13,14,15]])]7)split()方法指定方向的分割。axis=0時實現(xiàn)水平分割(默認),axis=1時則實現(xiàn)垂直分割。2科學計算NumPy>>>importnumpyasnp>>>arr=np.arange(16).reshape(4,4)>>>np.split(arr,2)#水平分割[array([[0,1,2,3], [4,5,6,7]]),array([[8,

9,10,11], [12,13,14,15]])]>>>np.split(arr,2,axis=1)#垂直分割[array([[0,

1], [4,

5], [8,

9], [12,13]]),array([[2,

3], [6,

7], [10,11], [14,15]])]2科學計算NumPy2.5廣播NumPy廣播是指在算術(shù)運算期間處理不同形狀的數(shù)組的能力。在Numpy中當數(shù)組進行運算時,如果兩個數(shù)組的形狀相同,那么兩個數(shù)組相乘就是兩個數(shù)組的對應位相乘,這要求各維度的長度相同,但是當運算中兩個數(shù)組的形狀不同使時,NumPy將會自動觸發(fā)廣播機制,所以要了解numpy的廣播機制,才能更好的進行數(shù)組的運算。2科學計算NumPy2.5廣播NumPy廣播規(guī)則:1.讓所有輸入數(shù)組都向其中shape最長的數(shù)組看齊,shape中不足的部分都通過在左邊加1補齊。2.如果兩個數(shù)組的形狀在任何一個維度上都不匹配,那么數(shù)組的形狀會沿著維度為1的維度進行擴展,以匹配另一個數(shù)組的形狀。3.輸出數(shù)組的shape是輸入數(shù)組shape的各個軸上的最大值。4.如果兩個數(shù)組的形狀在任何一個維度上都不匹配,并且沒有任何一個維度等于1,則引發(fā)異常。2科學計算NumPy1)一維數(shù)組與標量相加在NumPy廣播機制中,對于一維數(shù)組,要實現(xiàn)一個一維數(shù)組與一個標量作操作,那么需要將標量拉伸為與一維數(shù)組相匹配的形狀,再進行加法,拉伸位置的值都為該標量的值。圖10-1(a)所示,要實現(xiàn)一維數(shù)組np.arange(3)與一個標量2相加,需要將標量2拉伸到與一維數(shù)組相同的形狀,再進行相加。圖10-1Numpy廣播2科學計算NumPy>>>importnumpyasnp>>>arr=np.arange(3)>>>arr[012]>>>arr+=2>>>arr[234]2科學計算NumPy2)二維數(shù)組與一維數(shù)組相加在二維數(shù)組中,要實現(xiàn)一個二維數(shù)組與一個一維數(shù)組的和,需要將一維數(shù)組拉伸到與二維數(shù)組相同的形狀,拉伸的值與原一維數(shù)組相同。如圖10-1(b)所示,要實現(xiàn)一個3×3的二維數(shù)組與一個1×3的一維數(shù)組的和,需要將一維數(shù)組拉伸到二維數(shù)組相同的形狀,拉伸位置的值與一維數(shù)組對應相同。圖10-1Numpy廣播2科學計算NumPy>>>importnumpyasnp>>>arr=np.arange(9).reshape(3,3)>>>arr2=np.ones(3,dtype=int)>>>arr3=arr+arr2>>>arr3[[123][456][789]]2科學計算NumPy3)n*1數(shù)組與1*n數(shù)組相加實現(xiàn)一個3×1一維數(shù)組與1×3一維數(shù)組的和,需要將3×1的數(shù)組拉伸為3×3的形狀,同時將1×3的數(shù)組也拉伸為3×3的形狀,拉伸位置的值為對應,如圖10-1(c)所示。圖10-1Numpy廣播2科學計算NumPy>>>importnumpyasnp>>>arr=np.arange(3).reshape(3,1)>>>arr2=np.arange(3)>>>arr3=arr+arr2>>>arr3[[012][123][234]]2科學計算NumPy4)尾部維度不匹配3×3的二維數(shù)組和1×4的一維數(shù)組求和,結(jié)果會是什么呢?圖10-1Numpy廣播2科學計算NumPy>>>importnumpyasnp>>>arr=np.arange(9).reshape(3,3)>>>arr2=np.ones(4,dtype=int)>>>arr3=arr+arr2Traceback(mostrecentcalllast):File"<pyshell#3>",line1,in<module>arr3=arr+arr2ValueError:operandscouldnotbebroadcasttogetherwithshapes(3,3)(4,)3可視化Matplotlibmatplotlib是一個優(yōu)秀的Python數(shù)據(jù)可視化庫,用于創(chuàng)建各種靜態(tài)、動態(tài)、交互式和嵌入式圖表。它廣泛用于數(shù)據(jù)科學、統(tǒng)計學、金融、工程和其他領域。matplotlib提供了廣泛的圖表類型,例如,線圖、散點圖、餅圖、條形圖、直方圖、熱力圖和等高線圖等。它還具有強大的自定義功能,可以讓用戶輕松控制圖表的各個方面,例如,標簽、注釋、顏色、字體和圖例等。matplotlib還可以與其他Python工具和庫集成。例如,它可以與Numpy、Pandas、SciPy和Seaborn等庫結(jié)合使用,以更高效地處理和可視化數(shù)據(jù)。安裝matplotlib,命令為:pipinstallmatplotlib3.1創(chuàng)建畫布和創(chuàng)建子圖3可視化Matplotlib創(chuàng)建一個空白畫布,可以指定畫布大小,像素等參數(shù)。plt.figure(num,figsize=None,dpi=None,facecolor=None,edgecolor=None,frameon=True)num:圖像編號或名稱,數(shù)字為編號,字符串為名稱。figsize:指定figure的寬和高,單位為英寸。dpi:指定繪圖對象的分辨率。facecolor:背景顏色。edgecolor:邊框顏色。frameon:是否顯示邊框。3可視化Matplotlib>>>importmatplotlib.pyplotasplt>>>plt.figure(figsize=(8,6))>>>plt.show()3可視化Matplotlib創(chuàng)建并選中子圖,可以指定子圖的行數(shù)、列數(shù)、選中圖片編號figure.subplot(nrows,ncols,plot_number)nrows:子圖的行數(shù),ncols:子圖的列數(shù),plot_number:子圖的編號。3可視化Matplotlib多個對其的行和列子圖是一種常見的需求,matplotlib提供了subplot()函數(shù)在網(wǎng)格中創(chuàng)建單個子圖,該函數(shù)中,nrows表示行數(shù),ncols表示列數(shù),plot_number為索引位置,下列在全局繪圖區(qū)域中創(chuàng)建2×3個子繪圖區(qū)域。>>>importmatplotlib.pyplotasplt>>>foriinrange(1,7) plt.subplot(2,3,i)>>>plt.show()3可視化Matplotlibmatplotlib還提供了axes()函數(shù)自定義繪制子圖的功能,通過指定參數(shù)來控制繪圖區(qū)域的位置、大小和比例等。plt.axes(rect)rect:包含四個浮點數(shù)的列表或元組,表示坐標軸的位置和尺寸。通常采用(left、bottom、width、height)的形式,表示相對于繪圖區(qū)域的左下角的位置和寬度、高度。3可視化Matplotlib>>>importmatplotlib.pyplotasplt>>>plt.figure(figsize=(12,6))#react1、react2、react3表示子圖的位置>>>react1=[0.1,0.55,0.65,0.35]

#[左,下,寬,高]規(guī)定子圖的區(qū)域>>>react2=[0.1,0.1,0.65,0.35]>>>react3=[0.8,0.1,0.15,0.8]>>>plt.axes(react1)>>>plt.axes(react2)>>>plt.axes(react3)>>>plt.show()3.2添加畫布內(nèi)容3可視化Matplotlib在創(chuàng)建一個空白畫布后,如何繪制圖的繪圖的主體部分呢。其中添加標題、坐標軸名稱、繪制圖形等步驟是并列的,沒有先后順序,可以先繪制圖形,也可以先添加各類標簽。但是添加圖例一定要在繪制圖形之后。plt常用的標簽設置函數(shù)見表10-6。3可視化Matplotlibimportnumpyasnpimportmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']#正常顯示中文標簽plt.figure(figsize=(8,6))#創(chuàng)建畫布data=np.arange(0,1,0.01)#使用Numpy創(chuàng)建數(shù)據(jù)plt.title('函數(shù)示例')#設置標題plt.xlabel('X軸')#設置X軸名稱plt.ylabel('Y軸')#設置Y軸名稱plt.xlim(0,1)#指定當前圖形x軸的范圍plt.ylim(0,1)#指定當前圖形y軸的范圍plt.xticks([0,0.2,0.4,0.6,0.8,1])#X軸刻度的數(shù)目與取值plt.yticks([0,0.2,0.4,0.6,0.8,1])#Y軸刻度的數(shù)目與取值plt.plot(data,data**2,'-')plt.plot(data,data**3,':')plt.legend(['y=x^2','y=x^3'])#設置當前圖形的圖例plt.show()3.3繪圖的顯示與保存3可視化Matplotlib在本機上顯示繪圖,可以調(diào)用matplotlib的show()函數(shù)plt.show()保存繪圖通常采用savefig()函數(shù),該函數(shù)功能如下:fig.savefig(save_path,format='png',dpi=300)save_path:保存路徑;format:文件格式為png、pdf、svg、ps等;dpi:設置每英寸點數(shù)的分辨率,默認為100。3.4pyplot的動態(tài)rc參數(shù)3可視化Matplotlibpyplot使用rc配置文件來自定義圖形的各種默認屬性,被稱為rc配置或rc參數(shù)。

在pyplot中幾乎所有的默認屬性都是可以控制的,例如,視圖窗口大小以及每英寸點數(shù)、線條寬度、顏色和樣式、坐標軸、坐標和網(wǎng)格屬性、文本、字體等。兩種方式可以設置參數(shù),即全局參數(shù)定制和rc設置方法。查看matplotlib的rc參數(shù):>>>importmatplotlibasplt>>>plt.rc_params()3.4pyplot的動態(tài)rc參數(shù)3可視化Matplotlib常用參數(shù):?Axes:設置坐標軸邊界、顏色、坐標、刻度值大小和網(wǎng)格的顯示;?Figure:設置邊界顏色、圖形大小和子區(qū);?Font:設置字號、字體和樣式;?Grid:設置網(wǎng)格顏色和線型;?Legend:設置圖例和其中的文本顯示;?Lines:設置線條顏色、寬度、線型等;?Savefig:對保存圖像進行單獨設置;?xtick和ytick:X、Y軸的主刻度和次刻度設置顏色、大小、方向和標簽大小。3.4pyplot的動態(tài)rc參數(shù)3可視化Matplotlib為了正確顯示中文字符,一般在程序中加入下列代碼更改默認設置。顯示中文后,會出現(xiàn)數(shù)字前的負號無法正常顯示,可以添加第二行代碼。一些常見的字體名稱和對應的英文名稱見表10-7。plt.rcParams['font.sans-serif']=['SimHei']#正常顯示中文標簽plt.rcParams['axes.unicode_minus']=False#正常顯示負號3可視化Matplotlib3可視化Matplotlib線條的常用rc參數(shù)名稱、解釋和取值見表10-8。3可視化Matplotlib常用的線條類型解釋見表10-9。常用的8種顏色的縮寫見表10-10。3.5常見圖形繪制3可視化Matplotlib1.折線圖折線圖(linechart)是一種將數(shù)據(jù)點按照順序連接起來的圖形??梢钥醋魇菍⑸Ⅻc圖,按照x軸坐標順序連接起來的圖形。plt.plot(*args,**kwargs)plot()函數(shù)在官方文檔的語法中只要求填入不定長參數(shù),實際可以填入的主要參數(shù)見表10-11。3.5常見圖形繪制3可視化Matplotlib1.折線圖3.5常見圖形繪制3可視化Matplotlib1.折線圖importmatplotlibaspltt=np.arange(0.,5.,0.2)plt.plot(t,t,'r',t,t**2,'bs',t,t**3,'g^')plt.show()3.5常見圖形繪制3可視化Matplotlib2.散點圖散點圖(scatterdiagram)又稱為散點分布圖,是以一個特征為橫坐標,另一個特征為縱坐標,利用坐標點(散點)的分布形態(tài)反映特征間的統(tǒng)計關系的一種圖形。值是由點在圖表中的位置表示,類別是由圖表中的不同標記表示,通常用于比較跨類別的數(shù)據(jù)。3.5常見圖形繪制3可視化Matplotlib2.散點圖matplotlib.pyplot.scatter(x,y,s=None,c=None,marker=None,alpha=None)參數(shù)解析:?x,y:數(shù)組或者標量,表示散點的x和y坐標。?s:標量或數(shù)組,可選。表示點的大小。?c:顏色、序列、或者數(shù)組。可選。表示點的顏色。?marker:標量或字符串,可選。表示點的形狀。alpha:標量,可選。表示點的透明度。3.5常見圖形繪制3可視化Matplotlib2.散點圖importnumpyasnpimportmatplotlib.pyplotaspltfig,ax=plt.subplots()#plt.title('散點圖示例')formarin['.','o','D']:n=100x,y=np.random.randn(2,n)ax.scatter(x,y,label=mar,marker=mar)ax.legend()ax.grid(True)plt.show()3.5常見圖形繪制3可視化Matplotlib3.直方圖直方圖(histogram)又稱質(zhì)量分布圖,是統(tǒng)計報告圖的一種,由一系列高度不等的縱向條紋或線段表示數(shù)據(jù)分布的情況,一般用橫軸表示數(shù)據(jù)所屬類別,縱軸表示數(shù)量或者占比。用直方圖可以比較直觀地看出產(chǎn)品質(zhì)量特性的分布狀態(tài),便于判斷其總體質(zhì)量分布情況。直方圖可以發(fā)現(xiàn)分布表無法發(fā)現(xiàn)的數(shù)據(jù)模式、樣本的頻率分布和總體的分布。3.5常見圖形繪制3可視化Matplotlibmatplotlib.pyplot.hist(x,bins=None,range=None,density=False)參數(shù)說明:?x:要繪制直方圖的數(shù)據(jù)。?bins:可選參數(shù),指定直方圖的區(qū)間個數(shù)或邊界。如果不提供此參數(shù),默認為10個區(qū)間。?range:可選參數(shù),指定直方圖的數(shù)據(jù)范圍。如果不提供此參數(shù),默認為數(shù)據(jù)的最小值和最大值。?density:可選參數(shù),指定是否將直方圖的值歸一化為概率密度(即將計數(shù)除以總數(shù)以得到占比),默認為False。3可視化Matplotlibimportmatplotlib.pyplotaspltimportrandom#生成12個月的隨機銷售數(shù)據(jù)#假定每月銷售額在10000到50000之間sales_data=[random.randint(10000,50000)for_inrange(12)]months=range(1,13)#生成1到12的月份#繪制銷售數(shù)據(jù)的直方圖plt.figure(figsize=(8,6))#設置圖形大小plt.hist(sales_data,bins=6,color='skyblue',edgecolor='black')plt.rcParams['font.sans-serif']=['SimHei']#正常顯示中文標簽plt.title('公司銷售數(shù)據(jù)—銷售額分布圖',fontsize=16)#圖表標題plt.tick_params(labelsize=16)#修改x,y軸刻度字體大小plt.xlabel('銷售額',fontsize=16)#X軸標簽plt.ylabel('頻率',fontsize=16)#Y軸標簽plt.show()3.5常見圖形繪制3可視化Matplotlib4.餅圖餅圖(piegraph)是將各項的大小與各項總和的比例顯示在一張“餅”中,以“餅”的大小來確定每一項的占比。餅圖可以比較清楚地反映出部分與部分、部分與整體之間的比例關系,易于顯示每組數(shù)據(jù)相對于總數(shù)的大小,而且顯現(xiàn)方式直觀。3可視化Matplotlibmatplotlib.pyplot.pie(x,explode=None,labels=None,colors=None,autopct=None,shadow=False,startangle=None)參數(shù)說明:?x:餅圖的數(shù)據(jù),可以是一個數(shù)組或者列表;其中,數(shù)組的每個元素代表一個扇形的大小,數(shù)組的總和決定了餅圖的總大小。?explode:可選參數(shù),用于指定哪些扇形將會被“爆破”(分離出來)。默認值為None,表示不分離任何扇形。?labels:可選參數(shù),用于為每個扇形添加標簽,默認值為None。?colors:可選參數(shù),用于指定餅圖的顏色,默認值為None,表示使用默認的matplotlib顏色循環(huán)。?autopct:可選參數(shù),用于為每個扇形添加百分比標簽,默認值為None,表示不顯示百分比標簽。?shadow:可選參數(shù),用于為餅圖添加陰影效果,默認值為False,表示不顯示陰影。?startangle:可選參數(shù),用于指定餅圖的起始角度,默認值為None,表示以x軸正方向為起始角度。3可視化Matplotlibimportmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['FangSong']#正常顯示中文標簽seasons=['春季','夏季','秋季','冬季']#定義季節(jié)sales=[3000,4500,2000,3500]#定義每個季節(jié)的銷售額explode=(0.05,0.2,0.05,0.05)#控制分離的距離的,突出銷售額最大的plt.pie(sales,labels=seasons,explode=explode,autopct='%1.1f%%')#繪制餅圖plt.title('四季銷售額比例')#添加標題plt.show()#顯示圖形4PandasPandas(pythondataanalysislibrary)是基于Numpy的數(shù)據(jù)分析模塊,它提供了大量標準數(shù)據(jù)模型和高效操作大型數(shù)據(jù)集所需的工具。可以說Pandas是使得Python能夠成為高效且強大的數(shù)據(jù)分析環(huán)境的重要因素之一。Pandas的主要數(shù)據(jù)結(jié)構(gòu)是Series(一維數(shù)據(jù))與DataFrame(二維數(shù)據(jù)),這兩種數(shù)據(jù)結(jié)構(gòu)足以處理金融、統(tǒng)計、社會科學、工程等領域里的大多數(shù)典型用例。安裝Pandas,命令為pipinstallpandas引用Pandas方式為importpandasaspd4.1SeriesSeries是一種一維數(shù)組對象,包含了一個值序列,并且包含了數(shù)據(jù)標簽,稱為索引(index),可通過索引來訪問數(shù)組中的數(shù)據(jù)。通過指定索引和值來創(chuàng)建Series,下例中的索引與默認索引一致。4Pandasimportpandasaspda=list(range(5))b=['a','b','c','d','e']c=pd.Series(b,index=a,name='c')print(c)0a1b2c3d4eName:c,dtype:object4.2DataFrameDataFrame是一個表格型的數(shù)據(jù)結(jié)構(gòu),它含有一組有序的列,每列可以是不同的值類型(數(shù)值、字符串、布爾值等)。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典(共用同一個索引)。創(chuàng)建DataFrame,格式如下:pd.DataFrame(data,index,columns,dtype,copy)data:一組數(shù)據(jù)(ndarray、series,map,lists,dict等類型);index:索引值,或者可以稱為行標簽;columns:列標簽,默認為RangeIndex(0,1,2,…,n);dtype:數(shù)據(jù)類型;

copy:拷貝數(shù)據(jù),默認為False。4Pandas下面將演示使用Pandas創(chuàng)建的內(nèi)容,見表10-12。>>>importpandasaspd>>>columns=['姓名','語文','數(shù)學','外語','體育']>>>index=['0001','0002','0003','0004']>>>data=[['張三',97,93,96,100],['李四',94,97,94,97],['王五',96,94,99,92],['小明',91,97,93,99]]>>>df=pd.DataFrame(data,index=index,columns=columns)>>>pd.set_option('display.unicode.east_asian_width',True)#設置列名對齊>>>df4PandasDataFrame會自動加上索引(跟Series一樣),且全部列會被有序排列。如果指定了列序列,則DataFrame的列就會按照指定順序進行排列。DataFrame的基礎屬性有index、columns、values、size、ndim、shape和dtypes,其解釋見表10-134Pandas下面將演示輸出DataFrame的基礎屬性。>>>df.indexIndex(['0001','0002','0003','0004'],dtype='object')>>>df.columnsIndex(['姓名','語文','數(shù)學','外語','體育'],dtype='object')>>>df.values[['張三'979396100]['李四'94979497]['王五'96949992]['小明'91979399]]4Pandas>>>df.size20>>>df.ndim2>>>df.shape(4,5)>>>df.dtypes姓名object語文int64數(shù)學int64外語int64體育int64dtype:object4.3數(shù)據(jù)查詢通過列索引或以屬性的方式可以單獨獲取DataFrame的列數(shù)據(jù),返回的數(shù)據(jù)類型為Series。>>>df['姓名']0001張三0002李四0003王五0004小明Name:姓名,dtype:object4Pandas通過切片形式可以選取一行或多行數(shù)據(jù)。查詢成績表中李四和王五的所有成績。>>>df[1:3]姓名語文數(shù)學外語體育0002李四949794970003王五96949992head()、tail()和sample()通過DataFrame提供的head()和tail()方法可以得到多行數(shù)據(jù),head()方法從開始獲取連續(xù)的數(shù)據(jù),tail()方法從末尾獲取連續(xù)的數(shù)據(jù)。sample可以隨機抽取數(shù)據(jù)并顯示。它們的使用方法如下:head(n)#獲取前n行,默認獲取前5行tail(n)#獲取最后n行,默認獲取最后5行sample(n)#隨機抽取n行顯示sample(frac=0.6)#隨機抽取60%的行4Pandasloc和iloc:DataFrame.loc(行索引名稱或條件,列索引名稱)loc屬性根據(jù)指定參數(shù)的索引或者索引條件進行索引,返回指定索引的數(shù)據(jù)。返回指定行的數(shù)據(jù),類型為Series,返回多行數(shù)據(jù),類型為DataFrame。DataFrame.iloc(行索引位置,列索引位置)iloc屬性根據(jù)指定參數(shù)的位置進行索引,返回指定行和列的索引數(shù)據(jù)。4Pandasloc和iloc:下面例子分別演示了根據(jù)指定索引“0001”輸出第一行數(shù)據(jù)、輸出第一行和第二行數(shù)據(jù),篩選語文成績大于95的學生姓名,使用iloc屬性,輸出王五同學的體育成績。4Pandas>>>df.loc['0001']姓名張三語文97數(shù)學93外語96體育100Name:0001,dtype:object>>>df.loc['0001':'0002']姓名語文數(shù)學外語體育0001張三979396

1000002李四94979497>>>df.loc[df['語文']>95,['姓名‘]]姓名0001張三0003王五>>>df.iloc[2,4]92DataFrame.query方法查詢數(shù)據(jù)4Pandas4.4數(shù)據(jù)清洗在采集過數(shù)據(jù)程中,獲取的數(shù)據(jù)一般是不完整的、有噪聲的、形狀不一致的,因此,在使用數(shù)據(jù)之前需要對數(shù)據(jù)進行清洗。1、缺失值統(tǒng)計isnull()函數(shù)可以檢測數(shù)據(jù)中的缺失值,如果值缺失返回True,否則返回False。也可以和sum()函數(shù)配合使用,統(tǒng)計每列的缺失值數(shù)量。4Pandas>>>df=pd.DataFrame(np.arange(12).reshape(3,4),columns=['a','b','c','d'])#將第二行和第二列置空>>>df['b']=np.nan>>>df.iloc[1,:]=np.nan>>>dfa

bcd0

0.0

NaN

2.0

3.01

NaN

NaN

NaN

NaN2

8.0

NaN

10.0

11.04Pandas>>>df.isnull()abcd0

False

True

False

False1

True

True

True

True2

False

True

False

False>>>df.isnull().sum()a1b3c1d1dtype:int642、缺失值處理在處理缺失值時常用兩種方法:刪除缺失值和填充缺失值。1)刪除缺失值:通過dropna方法可以刪除具有缺失值的行。格式如下:dropna(axis=0,how='any',thresh=None,

溫馨提示

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

評論

0/150

提交評論