版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第10章
實(shí)戰(zhàn)項(xiàng)目之Pandas和
MatplotlibPandas入門Pandas運(yùn)算Pandas讀寫數(shù)據(jù)Pandas和Matplotlib繪圖目錄Pandas運(yùn)算10.210.1Pandas入門10.3Pandas讀寫數(shù)據(jù)Pandas和Matplotlib繪圖10.4知識(shí)架構(gòu)10.1Pandas入門1Pandas安裝2Series和DataFrame對(duì)象3索引對(duì)象4學(xué)生實(shí)踐練習(xí)10.1Pandas入門1Pandas安裝1.使用PyCharm工具進(jìn)行安裝
依次單擊菜單中的“File”→“Settings…”打開PyCharm的設(shè)置界面,單擊設(shè)置界面的“Project工程名”(此處為“Projectchapter10”)下的“ProjectInterpreter”菜單,單擊“+”按鈕添加Pandas庫(kù),如圖10.1Pandas入門1Pandas安裝
打開命令行工具,執(zhí)行“pipinstallpandas”命令安裝Pandas庫(kù),如圖2.使用pip命令安裝10.1Pandas入門2Series和DataFrame對(duì)象1.Series對(duì)象
Series是一種類似于一維數(shù)組的對(duì)象,它由一組數(shù)據(jù)及一組與之相關(guān)的數(shù)據(jù)標(biāo)簽(索引)組成??梢杂梢唤M數(shù)據(jù)產(chǎn)生最簡(jiǎn)單的Series,也可以帶有一個(gè)對(duì)各個(gè)數(shù)據(jù)點(diǎn)進(jìn)行標(biāo)記的索引。Series對(duì)象創(chuàng)建的語(yǔ)法如下:frompandasimportSeries#導(dǎo)入Pandas模塊中的Series類Series對(duì)象名=Series(列表)#最簡(jiǎn)單的SeriesSeries對(duì)象名=Series(列表,index=索引的列表)#帶有標(biāo)記的索引
如果沒(méi)有為數(shù)據(jù)指定索引,會(huì)自動(dòng)創(chuàng)建一個(gè)0到N?1(N為數(shù)據(jù)的長(zhǎng)度)的整數(shù)型索引,這時(shí)可以通過(guò)Series的values和index屬性獲取其數(shù)組的表示形式和索引對(duì)象。10.1Pandas入門2Series和DataFrame對(duì)象示例10.1
分別使用兩種方式創(chuàng)建Series對(duì)象,并輸出該對(duì)象及它的數(shù)組的表示形式和索引對(duì)象。frompandasimportSeriesobj1=Series([5,8,7])#最簡(jiǎn)單的Series對(duì)象obj2=Series([5,8,7],index=["a","b","c"])#帶有對(duì)各個(gè)數(shù)據(jù)標(biāo)記的索引print(obj1)print(obj2)print("Series的值為:",obj1.values)print("Series的索引對(duì)象為:",obj1.index)10.1Pandas入門2Series和DataFrame對(duì)象示例10.1的結(jié)果,如圖10.3所示。10.1Pandas入門2Series和DataFrame對(duì)象示例10.2根據(jù)Series對(duì)象的特性實(shí)現(xiàn)Series對(duì)象的各項(xiàng)操作。frompandasimportSeriesobj=Series([8,6,-5,2],index=["a","b","c","d"])定義Series對(duì)象如下:
(1)Series對(duì)象可以通過(guò)索引的方式選取Series中的單個(gè)或一組值,代碼如下:print("1.選取Series中的單個(gè)或一組值")print(obj["a"])#輸出8print(obj["d"])#輸出2print(obj[["a","c","d"]])#選取索引為"a","c","d"對(duì)應(yīng)的值10.1Pandas入門2Series和DataFrame對(duì)象print("2.進(jìn)行NumPy數(shù)組運(yùn)算")print(obj[obj>0])#獲取值大于0的數(shù)據(jù)print(obj*2)#輸出Series對(duì)象中每個(gè)數(shù)據(jù)乘2之后的結(jié)果(3)將Series看成是一個(gè)定長(zhǎng)的有序字典,因?yàn)樗且粋€(gè)索引值到數(shù)據(jù)值的一個(gè)映射,代碼如下:print("3.將Series看成是一個(gè)定長(zhǎng)的有序字典")print("a"inobj)#判斷obj對(duì)象中是否存在索引值為"a"的數(shù)據(jù)dict={"a":23,"b":12,"c":8}#定義字典對(duì)象obj2=Series(dict)#將dict對(duì)象轉(zhuǎn)化為Series對(duì)象(2)對(duì)Series對(duì)象進(jìn)行NumPy數(shù)組運(yùn)算,如根據(jù)布爾型數(shù)組進(jìn)行過(guò)濾、標(biāo)量乘法或應(yīng)用數(shù)學(xué)函數(shù)等都會(huì)保留索引和值之間的連接,代碼如下:10.1Pandas入門2Series和DataFrame對(duì)象print("4.isnull()方法檢測(cè)缺失數(shù)據(jù)")obj.isnull()#檢測(cè)缺失數(shù)據(jù)(5)在算術(shù)運(yùn)算中會(huì)自動(dòng)對(duì)齊不同索引的數(shù)據(jù),代碼如下:print("5.自動(dòng)對(duì)齊不同索引的數(shù)據(jù)")obj2=Series([8,6,-5],index=["a","b","e"])#再定義一個(gè)Series對(duì)象print(obj+obj2)#輸出兩個(gè)Series對(duì)象的和(4)如果Series的值中出現(xiàn)NaN(NotaNumber:非數(shù)字),在Pandas模塊中提供了isnull()函數(shù)和notnull()函數(shù)用于檢測(cè)缺失數(shù)據(jù),Series對(duì)象也提供了isnull()方法檢測(cè)缺失數(shù)據(jù),代碼如下:10.1Pandas入門2Series和DataFrame對(duì)象print("6.Series對(duì)象本身及其索引都有一個(gè)name屬性")="population"#給obj對(duì)象本身的name屬性賦值="state"#給obj對(duì)象的索引的name屬性賦值print(obj)(7)Series的索引可以通過(guò)賦值的方式修改。如果對(duì)象中有4個(gè)數(shù)據(jù),索引賦值時(shí)也必須保證索引中有4個(gè)元素,代碼如下:print("7.Series的索引可以通過(guò)賦值的方式修改")obj.index=["f","g","k","m"]print(obj)(6)Series對(duì)象本身及其索引都有一個(gè)name屬性,該屬性跟Pandas其他的關(guān)鍵功能關(guān)系非常密切,代碼如下:10.1Pandas入門2Series和DataFrame對(duì)象代碼及運(yùn)行結(jié)果如圖10.1Pandas入門2Series和DataFrame對(duì)象2.DataFrame對(duì)象
DataFrame是一種類似電子表格的數(shù)據(jù)結(jié)構(gòu),一個(gè)DataFrame表示一個(gè)表格。它包含一個(gè)經(jīng)過(guò)排序的列表集,列表集中的每個(gè)數(shù)據(jù)都可以有不同的類型值(數(shù)字、字符串、布爾等)。DataFrame有行和列的索引;它可以被看作是一個(gè)Series的字典(每個(gè)Series共享一個(gè)索引)1)創(chuàng)建DataFrame對(duì)象
有很多方法來(lái)構(gòu)建一個(gè)DataFrame,但最常用的是用一個(gè)相等長(zhǎng)度列表的字典或NumPy數(shù)組來(lái)構(gòu)建,產(chǎn)生的DataFrame和Series一樣,它的索引會(huì)自動(dòng)分配,并且對(duì)列進(jìn)行了排序。10.1Pandas入門2Series和DataFrame對(duì)象示例10.3在IDLE工具中創(chuàng)建DataFrame對(duì)象。#導(dǎo)入Pandas模塊中的Series和DataFrame對(duì)象frompandasimportSeries,DataFramedata={"name":["yahoo","google","facebook"],"marks":[200,400,800],
"price":[9,3,7]}frame=DataFrame(data)#將相等長(zhǎng)度列表的字典對(duì)象轉(zhuǎn)化為DataFrame對(duì)象print(frame)#自定義DataFrame索引frame2=DataFrame(data,columns=['name','price','marks','debt'],
index=['a','b','c'])print(frame2)10.1Pandas入門2Series和DataFrame對(duì)象在IDLE工具中執(zhí)行創(chuàng)建DataFrame對(duì)象代碼,運(yùn)行結(jié)果如圖10.1Pandas入門2Series和DataFrame對(duì)象
在DataFrame對(duì)象中使用columns屬性獲取所有的列,能顯示所有列的名稱。在示例10.3中添加如下代碼:2)DataFrame對(duì)象中列的操作print(frame2.columns)使用columns屬性獲取所有列的運(yùn)行結(jié)果如圖10.1Pandas入門2Series和DataFrame對(duì)象另外,DataFrame對(duì)象能用類似字典的方式,得到某豎列的全部?jī)?nèi)容,且每列實(shí)際上是一個(gè)Series對(duì)象,因此可以將DataFrame理解成是由一個(gè)一個(gè)的Series組成的。結(jié)合Series對(duì)象的特性,可以統(tǒng)一給frame2對(duì)象的debt列賦值,在示例10.3中添加如下代碼frame2['debt']=89.2print(frame2)frame2對(duì)象的列賦值的運(yùn)行結(jié)果如圖10.1Pandas入門2Series和DataFrame對(duì)象DataFrame對(duì)象的每豎列都是一個(gè)Series對(duì)象,因此可以定義一個(gè)Series對(duì)象,將Series對(duì)象賦值給DataFrame對(duì)象中的某一列,在示例10.3中添加如下代碼:debt=Series([2.2,3.3],index=["a","c"])frame2["debt"]=debtprint(frame2)Series對(duì)象賦值給DataFrame對(duì)象中的某一列的運(yùn)行結(jié)果如圖10.1Pandas入門2Series和DataFrame對(duì)象DataFrame對(duì)象的values屬性與Series對(duì)象類似,會(huì)以二維ndarray的形式返回DataFrame中的數(shù)據(jù),如果DataFrame各列的數(shù)據(jù)類型不同,則值數(shù)組的數(shù)據(jù)類型就會(huì)選用能兼容所有列的數(shù)據(jù)類型。例如,現(xiàn)有data1和data2兩個(gè)數(shù)組,均轉(zhuǎn)化為DataFrame對(duì)象,其values的數(shù)據(jù)類型會(huì)有所不同,在示例10.3的基礎(chǔ)上修改代碼如下:3)values屬性data1={"num1":[200,400,800],"num2":[60,300,50]}data2={"name":["yahoo","google","facebook"],"marks":[200,400,800],"price":[9,3,7]}frame1=DataFrame(data1)frame2=DataFrame(data2)print(frame1.values)print(frame2.values)10.1Pandas入門2Series和DataFrame對(duì)象values屬性的運(yùn)行結(jié)果如圖10.1Pandas入門3索引對(duì)象示例10.4在IDLE工具中創(chuàng)建DataFrame對(duì)象。frompandasimportSeriesobj=Series(range(3),index=['a','b','c'])index=obj.index#獲取Series的索引對(duì)象print(index)#獲取第二位及之后的元素print(index[1:])
Pandas的索引對(duì)象負(fù)責(zé)管理軸標(biāo)簽和其他元數(shù)據(jù),如軸名稱等。構(gòu)建Series或DataFrame時(shí),所用到的任何數(shù)組或其他序列的標(biāo)簽都會(huì)被轉(zhuǎn)換成一個(gè)Index索引對(duì)象。查看索引對(duì)象應(yīng)使用index屬性。10.1Pandas入門3索引對(duì)象查看索引對(duì)象,如圖10.1Pandas入門3索引對(duì)象索引對(duì)象是不可修改的,對(duì)索引對(duì)象進(jìn)行修改將會(huì)出現(xiàn)如圖10.11所示的異常信息。這樣能使Index對(duì)象在多個(gè)數(shù)據(jù)結(jié)構(gòu)之間安全共享。例如,在示例10.4中修改索引對(duì)象,添加如下代碼:index[1]='d'修改索引對(duì)象的報(bào)錯(cuò)如圖10.1Pandas入門3索引對(duì)象表10.1中列出了Pandas庫(kù)中內(nèi)置的Index類,Index甚至可以被繼承從而實(shí)現(xiàn)特別的軸索引功能。10.1Pandas入門3索引對(duì)象1.Series和DataFrame的索引1)Series對(duì)象的索引Series對(duì)象的索引值不僅可以是整數(shù),還可以是字符串,代碼如下:frompandasimportSeriesimportnumpyasnpobj=Series(np.arange(4),index=['a','b','c','d'])#索引為整數(shù)print(obj[1])print(obj[2:4])#索引為字符串print(obj['b'])print(obj[['a','d']])10.1Pandas入門3索引對(duì)象Series對(duì)象使用整數(shù)或字符串作為索引值,如圖10.1Pandas入門3索引對(duì)象另外,可以設(shè)置特定索引對(duì)應(yīng)的值,例如,設(shè)置索引為'b'到'c'的值為5,添加代碼如下:obj['b':'c']=5print(obj)設(shè)置索引為'b'到'c'的值為5,如圖10.1Pandas入門3索引對(duì)象2)DataFrame對(duì)象的索引對(duì)DataFrame對(duì)象進(jìn)行索引,可以獲取一個(gè)或多個(gè)列,代碼如下:frompandasimportDataFrameimportnumpyasnpframe=DataFrame(np.arange(9).reshape(3,3),index=['a','c','d'],columns=['Ohio','Texas','California'])print(frame)print(frame['Ohio'])#獲取一列print(frame[['Texas','California']])#獲取多列10.1Pandas入門3索引對(duì)象對(duì)DataFrame進(jìn)行索引,如圖10.1Pandas入門3索引對(duì)象DataFrame對(duì)象的索引使用方式,需要注意以下3種情況:(1)通過(guò)切片或布爾型數(shù)組選取行,在上述代碼中添加如下代碼:#切片選取print(frame[:2])#布爾型數(shù)組:選取索引為‘California’中值大于3的記錄print(frame[frame['California']>3])通過(guò)切片或布爾型數(shù)組選取行,如圖10.1Pandas入門3索引對(duì)象(2)通過(guò)布爾型DataFrame進(jìn)行索引,在上述代碼中添加如下代碼:#布爾型DataFrame索引print(frame<5)#判斷元素是否小于5frame[frame<5]=0#設(shè)置frame中值小于5的元素均為0print(frame)通過(guò)布爾型DataFrame進(jìn)行索引,如圖10.1Pandas入門3索引對(duì)象(3)在DataFrame的行上進(jìn)行標(biāo)簽索引,引入了專門的索引字段loc和iloc,其中l(wèi)oc通過(guò)行標(biāo)簽索引數(shù)據(jù),而iloc通過(guò)行號(hào)索引行數(shù)據(jù)。例如,從DataFrame中選取行和列的子集,在上述代碼中添加如下代碼:print("原DataFrame對(duì)象數(shù)據(jù)為:\n",frame)#標(biāo)簽索引#loc通過(guò)行標(biāo)簽索引數(shù)據(jù),iloc通過(guò)行號(hào)索引行數(shù)據(jù)print(frame.loc[['a','d'],['Texas']])print(frame.iloc[[0,1],[0,1]])從DataFrame中選取行和列的子集,如圖10.1Pandas入門3索引對(duì)象2.重新索引Pandas對(duì)象的一個(gè)重要的方法是reindex,其作用是創(chuàng)建一個(gè)適應(yīng)新索引的新對(duì)象。1)Series對(duì)象重新索引調(diào)用Series的reindex將會(huì)根據(jù)新索引進(jìn)行重排。如果某個(gè)索引值當(dāng)前不存在,就引入缺失值。frompandasimportSeriesobj=Series([4.5,7.2,-6.5,4],index=['d','b','a','c'])#重新索引obj2=obj.reindex(['a','b','c','d','e'])print(obj2)print(obj.reindex(['a','b','c','d','e'],fill_value=0))#fill_value引入缺失值,設(shè)置為0示例10.510.1Pandas入門3索引對(duì)象對(duì)Series對(duì)象重新索引的運(yùn)行結(jié)果如圖10.1Pandas入門3索引對(duì)象對(duì)于時(shí)間序列這樣的有序數(shù)據(jù),重新索引時(shí)可以使用method參數(shù)實(shí)現(xiàn)插值處理,例如,使用ffill或pad可以實(shí)現(xiàn)前向填充值,使用bfill或backfill可以實(shí)現(xiàn)后向填充值。設(shè)置method參數(shù)的值為ffill的結(jié)果,在示例10.5中添加代碼如下:#重新索引并設(shè)置method參數(shù)為ffill,實(shí)現(xiàn)前向填充值obj3=Series(['blue','purple','yellow'],index=[0,2,4])print(obj3.reindex(range(6),method='ffill'))設(shè)置method參數(shù)的值為ffill的運(yùn)行結(jié)果如圖10.1Pandas入門3索引對(duì)象2)DataFrame對(duì)象重新索引調(diào)用DataFrame對(duì)象中的reindex方法可以修改索引(行)、列或兩個(gè)都修改,如果僅傳入一個(gè)序列,則會(huì)重新索引行。調(diào)用DataFrame對(duì)象中reindex方法的結(jié)果,編寫如下代碼:frompandasimportDataFrameimportnumpyasnpframe=DataFrame(np.arange(9).reshape(3,3),index=['a','c','d'],columns=['Ohio','Texas','California'])print(frame)#DataFrame對(duì)象重新索引frame2=frame.reindex(['a','b','c','d'])print(frame2)10.1Pandas入門3索引對(duì)象調(diào)用DataFrame對(duì)象中reindex方法的運(yùn)行結(jié)果如圖10.1Pandas入門3索引對(duì)象另外,使用columns關(guān)鍵字可以重新索引列,添加代碼如下:#使用columns關(guān)鍵字重新索引列states=['texas','utal','California']print(frame.reindex(columns=states))使用columns關(guān)鍵字重新索引列的運(yùn)行結(jié)果如圖所示。也可以同時(shí)對(duì)行和列進(jìn)行重新索引,而插值則只能按行應(yīng)用。10.1Pandas入門3索引對(duì)象3.刪除指定索引的值刪除某條軸上的一個(gè)或多個(gè)項(xiàng)很簡(jiǎn)單,只要指定索引即可,drop方法返回的是一個(gè)在指定軸上刪除指定值后的新對(duì)象。例如,在示例10.5中刪除索引為a和c的行記錄,代碼如下:frompandasimportDataFrameimportnumpyasnpframe=DataFrame(np.arange(9).reshape(3,3),index=['a','c','d'],columns=['Ohio','Texas','California'])print(frame)#刪除索引為a和c的行記錄new_obj=frame.drop(['a','c'])print(new_obj)10.1Pandas入門3索引對(duì)象刪除多個(gè)項(xiàng)的運(yùn)行結(jié)果如圖10.1Pandas入門4學(xué)生實(shí)踐練習(xí)
定義兩個(gè)字典對(duì)象,分別為wordDicts1={"人民":3,"群眾":2,"公平":4,"正義":6},wordDicts2={"司法":2,"社會(huì)":2}。分別將這兩個(gè)字典對(duì)象轉(zhuǎn)化為Series對(duì)象。輸出Series對(duì)象的索引,將兩個(gè)索引合并成一個(gè)新的索引對(duì)象,將第一個(gè)Series對(duì)象的索引對(duì)象替換為新的索引對(duì)象并輸出該Series對(duì)象的前面三個(gè)元素。2.實(shí)現(xiàn)思路(1)通過(guò)“Series(字典對(duì)象)”語(yǔ)句將字典對(duì)象轉(zhuǎn)化為Series對(duì)象。(2)使用“Series對(duì)象.index”語(yǔ)句獲取Series對(duì)象的索引對(duì)象。(3)使用索引對(duì)象中的union方法將兩個(gè)索引對(duì)象進(jìn)行合并。(4)使用Series對(duì)象中的reindex方法對(duì)該對(duì)象進(jìn)行重新索引。(5)使用“Series對(duì)象[上標(biāo):下標(biāo)]”語(yǔ)句截取Series對(duì)象中的元素。1.需求說(shuō)明知識(shí)架構(gòu)10.2Pandas運(yùn)算1算術(shù)運(yùn)算3匯總統(tǒng)計(jì)5處理缺失數(shù)據(jù)2排序4其他運(yùn)算方法6學(xué)生實(shí)踐練習(xí)10.2Pandas運(yùn)算1算術(shù)運(yùn)算1.相同類型對(duì)象的算術(shù)運(yùn)算Pandas可以對(duì)不同索引的相同對(duì)象進(jìn)行算術(shù)運(yùn)算,例如,在將對(duì)象相加時(shí),如果存在不同的索引對(duì),則結(jié)果的索引就是該索引對(duì)的并集,例如,將簡(jiǎn)單的兩個(gè)Series對(duì)象進(jìn)行相加,代碼如下:frompandasimportSeriess1=Series([7.2,-6.5,3.5,1.6],index=['a','c','d','e'])s2=Series([-2,3,4,5,8],index=['a','c','e','f','g'])print(s1+s2)不同索引對(duì)象相加的運(yùn)行結(jié)果如圖10.2Pandas運(yùn)算1算術(shù)運(yùn)算在不重疊的索引處引入NaN值,從而實(shí)現(xiàn)自動(dòng)的數(shù)據(jù)對(duì)齊,缺失值會(huì)在算術(shù)運(yùn)算過(guò)程中傳播。對(duì)于DataFrame,對(duì)齊操作會(huì)同時(shí)發(fā)生在行和列上。例如,兩個(gè)DataFrame對(duì)象相加操作,代碼如下:frompandasimportDataFrameimportnumpyasnpdf1=DataFrame(np.arange(9).reshape(3,3),columns=list('bcd'),index=['Ohio','Texas','Colorado'])df2=DataFrame(np.arange(12).reshape(4,3),columns=list('bde'),index=['Oregon','Ohio','Texas','Colorado'])print(df1)print(df2)#兩個(gè)DataFrame對(duì)象相加操作print(df1+df2)10.2Pandas運(yùn)算1算術(shù)運(yùn)算DataFrame對(duì)象相加的運(yùn)行結(jié)果如圖10.2Pandas運(yùn)算1算術(shù)運(yùn)算從上面的例子可以看出,沒(méi)有重疊的位置就會(huì)產(chǎn)生NaN值。使用DataFrame提供的add方法,傳入另一個(gè)DataFrame對(duì)象及一個(gè)fill_value參數(shù),添加代碼如下:#設(shè)置產(chǎn)生NaN值的位置為0print(df1.add(df2,fill_value=0))使用DataFrame對(duì)象的add方法的運(yùn)行結(jié)果如圖10.2Pandas運(yùn)算1算術(shù)運(yùn)算DataFrame和Series之間的算術(shù)運(yùn)算會(huì)將Series的索引匹配到DataFrame的列,然后沿著行一直向下傳播。DataFrame和Series之間的算術(shù)運(yùn)算操作的代碼如下:frompandasimportSeries,DataFrameimportnumpyasnpframe=DataFrame(np.arange(9).reshape(3,3),columns=list('bcd'),index=['Ohio','Texas','Colorado'])series=frame.iloc[0]print("DataFrame對(duì)象為:\n",frame)print("series對(duì)象為:\n",series)print("兩者相減結(jié)果為:\n",frame-series)2.不同類型對(duì)象的算術(shù)運(yùn)算10.2Pandas運(yùn)算1算術(shù)運(yùn)算DataFrame和Series之間的算術(shù)運(yùn)算的運(yùn)行結(jié)果如圖10.2Pandas運(yùn)算1算術(shù)運(yùn)算如果某個(gè)索引值在DataFrame的列或Series的索引中找不到,則參與運(yùn)算的兩個(gè)對(duì)象就會(huì)被重新索引以形成并集,例如,在上述代碼中添加語(yǔ)句:series2=Series(range(3),index=['b','e','f'])print("兩者相加結(jié)果為:\n",frame+series2)索引值不存在時(shí)的運(yùn)行結(jié)果如圖10.2Pandas運(yùn)算1算術(shù)運(yùn)算如果需要匹配行在列上傳播,則必須使用算術(shù)運(yùn)算方法,例如,在上述代碼中添加語(yǔ)句:series3=frame['d']print("series對(duì)象為:\n",series3)print("DataFrame對(duì)象為:\n",frame)#算術(shù)運(yùn)算print("算術(shù)運(yùn)算后:\n",frame.sub(series3,axis=0))10.2Pandas運(yùn)算1算術(shù)運(yùn)算使用算術(shù)運(yùn)算方法的運(yùn)行結(jié)果如圖10.2Pandas運(yùn)算2
排序根據(jù)條件對(duì)數(shù)據(jù)集進(jìn)行排序也是一種重要的內(nèi)置運(yùn)算,要對(duì)行或列索引進(jìn)行排序,使用sort_index方法將返回一個(gè)已排序的新對(duì)象序列對(duì)象.sort_index(axis=0,level=None,ascending=True,
inplace=False,kind='quicksort',na_position
='last',sort_remaining=True,by=None)10.2Pandas運(yùn)算2
排序在上述語(yǔ)法中,參數(shù)說(shuō)明如下。(1)axis:0按照行名排序;1按照列名排序。(2)level:默認(rèn)None,否則按照給定的level順序排列。(3)ascending:默認(rèn)True升序排列;False降序排列。(4)inplace:默認(rèn)False,否則排序之后的數(shù)據(jù)直接替換原來(lái)的數(shù)據(jù)框。(5)kind:排序方法,其值為{'quicksort','mergesort','heapsort'},默認(rèn)為'quicksort'。(6)na_position:其值為{'first',last'}缺失值,默認(rèn)排在最后即'last'。10.2Pandas運(yùn)算2
排序(7)sort_remaining:其值為True或False,默認(rèn)為Ture。如果其值為True,且是多層索引,則在指定級(jí)別排序后,也在其他級(jí)別(按順序)排序。(8)by:按照某一列或幾列數(shù)據(jù)進(jìn)行排序,但是by參數(shù)不建議使用。例如,對(duì)Series對(duì)象的排序代碼如下:frompandasimportSeriesimportnumpyasnpobj=Series(np.arange(4),index=['d','a','b','c'])#使用sort_index方法將返回一個(gè)已排序的新對(duì)象print(obj.sort_index())10.2Pandas運(yùn)算2
排序Series對(duì)象的排序的運(yùn)行結(jié)果如圖10.2Pandas運(yùn)算2
排序DataFrame也可以根據(jù)任意一個(gè)軸上的索引進(jìn)行排序。數(shù)據(jù)默認(rèn)是升序排序的,但也可以降序排序。sort_index()方法的使用代碼如下:frompandasimportDataFrameimportnumpyasnpframe=DataFrame(np.arange(9).reshape(3,3),index=['c','a','d'],columns=[4,6,5])print("DataFrame對(duì)象為:\n",frame)print("默認(rèn)排序(按照行名排序):\n",frame.sort_index())print("按照列名排序:\n",frame.sort_index(axis=1))print("按照列名降序排列:\n",frame.sort_index(axis=1,ascending=False))10.2Pandas運(yùn)算2
排序sort_index()方法的使用的運(yùn)行結(jié)果如圖10.2Pandas運(yùn)算2
排序在排序時(shí),任何缺失值默認(rèn)都會(huì)被放到Series的末尾。在DataFrame上,可以根據(jù)一個(gè)或多個(gè)列中的值進(jìn)行排序,將一個(gè)或多個(gè)列的名字傳遞給by選項(xiàng)即可達(dá)到該目的,代碼如下:frompandasimportDataFrameframe=DataFrame({'b':[4,-3,7,2],'a':[1,6,5,3]})print("DataFrame對(duì)象為:\n",frame)print("對(duì)“b”列進(jìn)行升序排列:\n",frame.sort_values(by='b'))print("對(duì)'a'和'b'兩列同時(shí)進(jìn)行升序排列:\n",frame.sort_values(by=['a','b']))10.2Pandas運(yùn)算2
排序根據(jù)一個(gè)或多個(gè)列中的值進(jìn)行排序的運(yùn)行結(jié)果如圖10.2Pandas運(yùn)算2
排序排名跟排序關(guān)系密切,它會(huì)增設(shè)一個(gè)排名值(從1開始,一直到數(shù)組中有效數(shù)據(jù)的數(shù)量),接下來(lái)介紹Series和DataFrame的rank方法。默認(rèn)情況下,rank是通過(guò)“為各組分配一個(gè)平均排名”的方式來(lái)破壞平級(jí)關(guān)系的。rank方法的使用代碼如下:frompandasimportSeriesobj=Series([7,-2,4,3,12])print("序列為:\n",obj.rank())print("根據(jù)值在原數(shù)據(jù)中出現(xiàn)的順序給出排名:\n",obj.rank(method="first"))10.2Pandas運(yùn)算2
排序rank方法的使用效果如圖10.2Pandas運(yùn)算3匯總統(tǒng)計(jì)Pandas對(duì)象擁有一組常用的數(shù)學(xué)統(tǒng)計(jì)方法,例如,使用sum方法按列或按行求和的操作,代碼如下:frompandasimportSeries,DataFrameimportnumpyasnpframe=DataFrame({"b":[4,-3,7,np.nan],"a":[1,6,5,3]})print("按列進(jìn)行求和運(yùn)算:\n",frame.sum())print("按行進(jìn)行求和運(yùn)算:\n",frame.sum(axis=1))10.2Pandas運(yùn)算3匯總統(tǒng)計(jì)使用sum方法按列或按行求和的運(yùn)行結(jié)果如圖10.2Pandas運(yùn)算4其他運(yùn)算方法1.唯一值還有一類方法可以從一維Series的值中抽取信息。第一個(gè)函數(shù)是unique,它可以得到Series對(duì)象中的唯一值數(shù)組。unique函數(shù)的使用代碼如下:frompandasimportSeries,DataFrameobj=Series(['a','c','a','c','b','a','d','d'])#獲取Series中的唯一值數(shù)組uniques=obj.unique()print(uniques)10.2Pandas運(yùn)算4其他運(yùn)算方法unique函數(shù)的使用效果如圖10.35所示。其中返回的唯一值是未排序的,如果有需要,我們還可以對(duì)結(jié)果使用sort方法再次進(jìn)行排序。10.2Pandas運(yùn)算4其他運(yùn)算方法2.值計(jì)數(shù)value_counts方法用于計(jì)算一個(gè)Series中各值出現(xiàn)的頻率,同時(shí)提供了isin方法用于計(jì)算一個(gè)表示“Series各值是否包含于傳入的值序列中”的布爾型數(shù)組。例如,value_counts方法和isin方法的使用,代碼如下:frompandasimportSeries,DataFrameobj=Series(['a','c','a','c','b','a','d','d'])#獲取Series中的唯一值數(shù)組uniques=obj.unique()print("原序列為:\n",uniques)uniques.sort()print("排序后:\n",uniques)print("統(tǒng)計(jì)頻率:\n",obj.value_counts())mask=obj.isin(['b','c'])print("檢測(cè)值是否存在:\n",mask)print("輸出與檢測(cè)值對(duì)應(yīng)存在的序列元素:\n",obj[mask])10.2Pandas運(yùn)算4其他運(yùn)算方法value_counts方法和isin方法的使用效果如圖10.2Pandas運(yùn)算5處理缺失數(shù)據(jù)缺失數(shù)據(jù)在大部分?jǐn)?shù)據(jù)分析應(yīng)用中都很常見(jiàn),Pandas的設(shè)計(jì)目標(biāo)之一就是讓缺失數(shù)據(jù)的處理任務(wù)盡量輕松。Pandas使用浮點(diǎn)值NaN(NotaNumber)表示浮點(diǎn)和非浮點(diǎn)數(shù)組中的缺失數(shù)據(jù)。它只是一個(gè)便于被檢測(cè)處理的標(biāo)記而已。使用isnull函數(shù)判斷是否為空對(duì)象,代碼如下:frompandasimportSeriesimportnumpyasnpdata=Series(['a',np.nan,'c','d'])print("原序列為:\n",data)#判斷是否為空對(duì)象print("判斷是否為空:\n",data.isnull())10.2Pandas運(yùn)算5處理缺失數(shù)據(jù)使用isnull函數(shù)判斷是否為空對(duì)象的運(yùn)行結(jié)果如圖10.37所示。10.2Pandas運(yùn)算5處理缺失數(shù)據(jù)缺失數(shù)據(jù)的處理方法見(jiàn)表10.3。10.2Pandas運(yùn)算5處理缺失數(shù)據(jù)使用dropna()方法過(guò)濾Series和DataFrame中的缺失數(shù)據(jù),代碼如下:frompandasimportSeries,DataFramefromnumpyimportnanasNAdata=Series([1,NA,3,NA,7])print("過(guò)濾缺失數(shù)據(jù):\n",data.dropna())print("通過(guò)布爾類型索引過(guò)濾數(shù)據(jù):\n",data[data.notnull()])data=DataFrame([[1,6,5],[2,NA,NA]])cdata=data.dropna()print("過(guò)濾DataFrame對(duì)象的缺失數(shù)據(jù):\n",cdata)10.2Pandas運(yùn)算5處理缺失數(shù)據(jù)使用dropna()方法過(guò)濾Series和DataFrame中的缺失數(shù)據(jù),運(yùn)行結(jié)果如圖10.38所示。10.2Pandas運(yùn)算6學(xué)生實(shí)踐練習(xí)1.需求說(shuō)明定義兩個(gè)字典對(duì)象,分別為wordDicts1={"人民":3,"群眾":2,"公平":4,"正義":6},wordDicts2={"司法":2,"社會(huì)":2,"公平":2},實(shí)現(xiàn)如下需求:(1)先將兩個(gè)字典對(duì)象轉(zhuǎn)化為Series對(duì)象,再合并轉(zhuǎn)化后的Series對(duì)象。對(duì)合并后的Series對(duì)象進(jìn)行排序和排名。(2)統(tǒng)計(jì)wordDicts1中關(guān)鍵字出現(xiàn)的總次數(shù)、關(guān)鍵字的個(gè)數(shù)及平均的次數(shù)。(3)將索引為“群眾”的值設(shè)置為NaN,濾除Series對(duì)象中缺失的數(shù)據(jù),即“群眾”對(duì)應(yīng)的記錄。10.2Pandas運(yùn)算6學(xué)生實(shí)踐練習(xí)2.實(shí)現(xiàn)思路(1)使用“Series(字典對(duì)象)”語(yǔ)句將字典對(duì)象轉(zhuǎn)化為Series對(duì)象。(2)使用“Series對(duì)象1.index.union(Series對(duì)象2.index)”語(yǔ)句合并兩個(gè)Series對(duì)象的索引對(duì)象。(3)使用“Series對(duì)象.reindex(新的索引對(duì)象)”重新對(duì)Series對(duì)象進(jìn)行索引。(4)使用“Series對(duì)象.fillna(0)”將值為NaN的數(shù)據(jù)填充為0。(5)使用“Series對(duì)象1+Series對(duì)象2”語(yǔ)句計(jì)算兩個(gè)Series對(duì)象的和。(6)使用“Series對(duì)象.sort_values(ascending=False)”對(duì)值進(jìn)行排序。(7)使用Series對(duì)象中的sum方法統(tǒng)計(jì)出關(guān)鍵字出現(xiàn)的總次數(shù)。(8)使用count方法統(tǒng)計(jì)關(guān)鍵字的個(gè)數(shù)。(9)使用mean方法統(tǒng)計(jì)平均的次數(shù)。(10)使用dropna方法濾除缺失的數(shù)據(jù)。知識(shí)架構(gòu)10.3Pandas讀寫數(shù)據(jù)1CSV文件的讀寫3MySQL數(shù)據(jù)庫(kù)的讀寫4學(xué)生實(shí)踐練習(xí)2Excel文件的讀寫10.3Pandas讀寫數(shù)據(jù)1CSV文件的讀寫在Pandas模塊中,使用read_csv方法讀取CSV文件,該方法返回一個(gè)DataFrame對(duì)象。【語(yǔ)法】pandas.read_csv(filepath_or_buffer,sep=',',delimiter=None,header='infer',names=None,index_col=None,usecols=None,squeeze=False,prefix=None,mangle_dupe_cols=True,dtype=None,engine=None,converters=None,true_values=None,false_values=None,skipinitialspace=False,skiprows=None,nrows=None,na_values=None,keep_default_na=True,na_filter=True,verbose=False,skip_blank_lines=True,parse_dates=False,infer_datetime_format=False,keep_date_col=False,date_parser=None,dayfirst=False,iterator=False,chunksize=None,compression='infer',thousands=None,decimal=b'.',lineterminator=None,quotechar='"',quoting=0,escapechar=None,comment=None,encoding=None,dialect=None,tupleize_cols=None,error_bad_lines=True,warn_bad_lines=True,skipfooter=0,skip_footer=0,doublequote=True,delim_whitespace=False,as_recarray=None,compact_ints=None,use_unsigned=None,low_memory=True,buffer_lines=None,memory_map=False,float_precision=None)1.讀取CSV文件到DataFrame10.3Pandas讀寫數(shù)據(jù)1CSV文件的讀寫在上述語(yǔ)法中,常用的參數(shù)介紹如下。(1)filepath_or_buffer:可以是URL,可用URL類型包括HTTP、FTP、S3和文件。(2)sep:指定分隔符。如果不指定參數(shù),則會(huì)嘗試使用逗號(hào)分隔。分隔符長(zhǎng)于一個(gè)字符并且不是'\s+'的,將使用Python的語(yǔ)法分析器,并且忽略數(shù)據(jù)中的逗號(hào)。(3)delimiter:定界符,備選分隔符(如果指定該參數(shù),則sep參數(shù)失效),默認(rèn)為None。(4)header:指定行數(shù)用來(lái)作為列名,數(shù)據(jù)開始行數(shù)。如果文件中沒(méi)有列名,則默認(rèn)為0,否則設(shè)置為None。(5)names:表示結(jié)果的列名列表,如果數(shù)據(jù)文件中沒(méi)有列標(biāo)題行,就需要執(zhí)行header=None。默認(rèn)列表中不能出現(xiàn)重復(fù),除非設(shè)定參數(shù)mangle_dupe_cols=True。(6)index_col:用作行索引的列編號(hào)或者列名,如果給定一個(gè)序列,則有多個(gè)行索引。(7)encoding:指定字符集類型,通常指定為'utf-8'。10.3Pandas讀寫數(shù)據(jù)1CSV文件的讀寫在下面的示例中,創(chuàng)建一個(gè)文件名稱為user.csv的文本文件,文件內(nèi)容如下:
Alice,23Mary,34Anna,28【示例10.6】使用read_csv方法讀取該CSV文件。importpandasaspdprint(pd.read_csv("user.csv",names=['name','age'],delimiter=','))10.3Pandas讀寫數(shù)據(jù)1CSV文件的讀寫read_csv方法的使用如圖10.40所示。10.3Pandas讀寫數(shù)據(jù)1CSV文件的讀寫2.將DataFrame對(duì)象寫入CSV文件中在Pandas模塊中,CSV文件使用to_csv方法寫入?!菊Z(yǔ)法】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,compression=None,quoting=None,quotechar='"',line_terminator='\n',chunksize=None,tupleize_cols=False,date_format=None,doublequote=True,escapechar=None,decimal='.',**kwds)10.3Pandas讀寫數(shù)據(jù)1CSV文件的讀寫在上述語(yǔ)法中,常用的參數(shù)介紹如下:(1)path_or_buf:可以是URL,可用URL類型包括HTTP、FTP、S3和文件。(2)sep:指定分隔符。如果不指定參數(shù),則會(huì)嘗試使用逗號(hào)分隔。分隔符長(zhǎng)于一個(gè)字符并且不是'\s+'的,將使用Python的語(yǔ)法分析器,并且忽略數(shù)據(jù)中的逗號(hào)。10.3Pandas讀寫數(shù)據(jù)1CSV文件的讀寫【示例10.7】使用to_csv方法寫入到CSV文件。frompandasimportDataFramedf=DataFrame({'one':[1,2,3],'two':[2,3,4],'three':[3,4,5]})print("DataFrame對(duì)象為:\n",df)print(df.to_csv("test.csv",index=False,sep=","))10.3Pandas讀寫數(shù)據(jù)1CSV文件的讀寫to_csv方法的使用如圖10.41所示。打開test.csv,內(nèi)容如圖10.42所示。10.3Pandas讀寫數(shù)據(jù)2Excel文件的讀寫使用Pandas讀寫Excel文件,需要安裝openpyxl、xlsxwriter和xlrd這3個(gè)第三方庫(kù),與其他的庫(kù)安裝方式相同,可以使用PyCharm工具或者pip命令安裝。下面介紹以上3個(gè)第三方庫(kù)的安裝方法:(1)openpyxl:模塊openpyxl源于PHPExcel,它提供了針對(duì).xlsx文件的讀寫功能,可以在命令行中執(zhí)行“pipinstallopenpyxl”命令進(jìn)行安裝。(2)xlsxwriter:用來(lái)寫入內(nèi)容到.xlsx文件中??梢栽诿钚兄袌?zhí)行“pipinstallxlsxwriter”安裝。(3)xlrd:用來(lái)讀取.xls和.xlsx文件中的數(shù)據(jù),可以在命令行中執(zhí)行“pipinstallxlrd”安裝。10.3Pandas讀寫數(shù)據(jù)2Excel文件的讀寫在Pandas模塊中,使用read_excel方法讀取Excel文件。【語(yǔ)法】1.讀取Excelpandas.read_excel(io,sheetname=0,header=0,skiprows=None,skip_footer=0,index_col=None,names=None,parse_cols=None,parse_dates=False,date_parser=None,na_values=None,thousands=None,convert_float=True,has_index_names=None,converters=None,engine=None,squeeze=False,**kwds)10.3Pandas讀寫數(shù)據(jù)2Excel文件的讀寫在上述語(yǔ)法中,常用的參數(shù)說(shuō)明如下:(1)sheetname:表示表格的名稱或索引,為0表示讀取第一頁(yè),也可以傳入讀取表格的名稱。(2)names:表示結(jié)果的列名列表,默認(rèn)為None。(3)index_col:用作行索引的列編號(hào)或者列名,如果給定一個(gè)序列,則有多個(gè)行索引。10.3Pandas讀寫數(shù)據(jù)2Excel文件的讀寫例如,在本地E盤創(chuàng)建一個(gè)Excel文件,文件名為user.xlsx,內(nèi)容見(jiàn)表10.4。10.3Pandas讀寫數(shù)據(jù)2Excel文件的讀寫使用read_excel方法讀取該Excel文件,見(jiàn)示例10.8。importpandasaspdprint(pd.read_excel("E:\\user.xlsx",names=["name","age"]))read_excel方法的使用如圖10.43所示。10.3Pandas讀寫數(shù)據(jù)2Excel文件的讀寫2.寫入Excel在Pandas模塊中,使用DataFrame對(duì)象提供的to_excel方法寫入內(nèi)容到Excel文件中。to_excel(self,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)【語(yǔ)法】在以上語(yǔ)法中,常用參數(shù)介紹如下:(1)excel_writer:表示需要寫入到Excel文件的路徑及文件名。(2)sheet_name:表示表格的名稱。(3)columns:表示表格的列名。10.3Pandas讀寫數(shù)據(jù)3MySQL數(shù)據(jù)庫(kù)的讀寫目前,數(shù)據(jù)庫(kù)大部分都屬于關(guān)系型的數(shù)據(jù)庫(kù),而編程語(yǔ)言大部分使用的數(shù)據(jù)是基于對(duì)象的,通過(guò)ORM(對(duì)象關(guān)系映射)技術(shù)可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)和編程語(yǔ)言之間數(shù)據(jù)的轉(zhuǎn)換。在Python中,最有名的ORM框架是SQLAlchemy。使用SQLAlchemy寫入數(shù)據(jù)到數(shù)據(jù)庫(kù)中的步驟如下:(1)使用PyCharm工具或者pip命令安裝SQLAlchemy庫(kù)。使用pip命令安裝SQLAlchemy庫(kù)可以在命令行工具中執(zhí)行“pipinstallsqlalchemy”命令進(jìn)行安裝。10.3Pandas讀寫數(shù)據(jù)3MySQL數(shù)據(jù)庫(kù)的讀寫(2)導(dǎo)入SQLAlchemy模塊中的create_engine方法和Pandas模塊,代碼如下:importpandasaspdfromsqlalchemyimportcreate_engine#引入create_engine方法(3)創(chuàng)建引擎,其中傳入的字符串格式為:數(shù)據(jù)庫(kù)類型+Python連接MySQL的庫(kù)名://用戶名:密碼@IP地址:端口號(hào)/數(shù)據(jù)庫(kù)名。例如,在示例10.9中,使用PyMySQL連接,需安裝PyMySQL,用戶名為root,密碼為123456,數(shù)據(jù)庫(kù)名為userdb,代碼如下:conn=create_engine('mysql+pymysql://root:123456@localhost:3306/newsdb?charset=utf8')10.3Pandas讀寫數(shù)據(jù)3MySQL數(shù)據(jù)庫(kù)的讀寫(4)使用Pandas的io.sql模塊下的to_sql方法,將DataFrame對(duì)象中的數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中,其中num表示表名,newsdb表示數(shù)據(jù)庫(kù)名,代碼如下:pd.io.sql.to_sql(df,'num',conn,schema='newsdb',if_exists='append')(5)使用Pandas模塊中的read_sql方法讀取數(shù)據(jù)庫(kù)中的記錄并保存到DataFrame對(duì)象中,代碼如下:df1=pd.read_sql('select*fromnum;',con=conn)10.3Pandas讀寫數(shù)據(jù)3MySQL數(shù)據(jù)庫(kù)的讀寫【示例10.9】數(shù)據(jù)庫(kù)的讀寫操作。frompandasimportDataFrameimportpandasaspdfromsqlalchemyimportcreate_engine#引入create_engine方法df=DataFrame({1:['Anna','Alice','Tom'],2:[23,27,56]})conn=create_engine('mysql+pymysql://root:123456@localhost:3306/userdb?charset=utf8')#將df對(duì)象的數(shù)據(jù)保存到user表中pd.io.sql.to_sql(df,'num',conn,schema='userdb',if_exists='append')#從數(shù)據(jù)庫(kù)中讀取user表記錄保存到DataFrame對(duì)象中df1=pd.read_sql('select*fromnum;',con=conn)print(df1)10.3Pandas讀寫數(shù)據(jù)3MySQL數(shù)據(jù)庫(kù)的讀寫數(shù)據(jù)庫(kù)的讀寫操作的運(yùn)行結(jié)果如圖10.44所示。10.3Pandas讀寫數(shù)據(jù)3MySQL數(shù)據(jù)庫(kù)的讀寫保存到UserDB數(shù)據(jù)庫(kù)中user表數(shù)據(jù)如圖10.45所示。10.3Pandas讀寫數(shù)據(jù)4學(xué)生實(shí)踐練習(xí)1.需求說(shuō)明定義一個(gè)字典對(duì)象,內(nèi)容為“{"人民":3,"群眾":2,"公平":4,"正義":6}”,將該對(duì)象轉(zhuǎn)化為DataFrame對(duì)象,將DataFrame對(duì)象分別保存到CSV文件、Excel文件和MySQL數(shù)據(jù)庫(kù)中,并分別以3種方式讀取其中的內(nèi)容,轉(zhuǎn)化為新的DataFrame對(duì)象。2.實(shí)現(xiàn)思路(1)使用DataFrame對(duì)象中的to_csv方法將對(duì)象中的內(nèi)容保存到CSV文件中。(2)使用Pandas模塊中的read_csv方法讀取CSV文件中的內(nèi)容,并轉(zhuǎn)化為DataFrame對(duì)象。10.3Pandas讀寫數(shù)據(jù)4學(xué)生實(shí)踐練習(xí)(3)使用DataFrame對(duì)象中的to_excel方法將對(duì)象中的內(nèi)容保存到Excel文件中。(4)使用Pandas模塊中的read_excel方法讀取Excel文件中的內(nèi)容,并轉(zhuǎn)化為DataFrame對(duì)象。(5)使用“pd.io.sql.to_sql(df,'words',conn,schema='newsdb',if_exists='append')”語(yǔ)句將DataFrame對(duì)象保存到MySQL數(shù)據(jù)庫(kù)中。(6)使用Pandas模塊中的read_sql方法從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)并保存在DataFrame對(duì)象中。知識(shí)架構(gòu)10.4Pandas和Matplotlib繪圖2Pandas繪圖3學(xué)生實(shí)踐練習(xí)Matplotlib繪圖110.4Pandas和Matplotlib繪圖1Matplotlib繪圖1.Matplotlib安裝Matplotlib是Python中最常用的可視化工具之一,可以非常方便地創(chuàng)建海量類型的2D圖表和一些基本的3D圖表。Matplotlib最早是為了可視化癲癇病人的腦皮層電圖相關(guān)的信號(hào)而研發(fā)的,因?yàn)樵诤瘮?shù)的設(shè)計(jì)上參考了MATLAB,所以叫作Matplotlib。Matplotlib首次發(fā)表于2007年,在開源和社區(qū)的推動(dòng)下,目前在基于Python的各個(gè)科學(xué)計(jì)算領(lǐng)域都得到了廣泛應(yīng)用。Matplotlib的安裝和其他第三方庫(kù)的安裝方式相同,可以使用pip命令和PyCharm工具進(jìn)行安裝。下面將分別介紹這兩種安裝方式。10.4Pandas和Matplotlib繪圖1Matplotlib繪圖1)使用pip命令安裝將Python的Scripts目錄添加到Path環(huán)境變量中,打開命令行工具,執(zhí)行“pipinstallmatplotlib”命令進(jìn)行安裝。2)使用PyCharm工具進(jìn)行安裝依次單擊菜單中的“File”→“Settings…”,打開PyCharm的設(shè)置界面,單擊設(shè)置界面的“Project工程名”(此處為“Projectchapter10”)下的“ProjectInterpreter”菜單,如圖10.48所示,單擊“+”按鈕添加Matplotlib庫(kù)。10.4Pandas和Matplotlib繪圖1Matplotlib繪圖2.Matplotlib畫圖Matplotlib中最基礎(chǔ)的模塊是pyplot,可以使用“importmatplotlib.pyplotasplt”語(yǔ)句導(dǎo)入pyplot模塊,并取該模塊的別名為plt。使用pyplot模塊中的plot方法實(shí)現(xiàn)折線圖的繪制?!臼纠?0.10】實(shí)現(xiàn)簡(jiǎn)單折線圖的繪制。#導(dǎo)入pyplot模塊,并取該模塊的別名為pltimportmatplotlib.pyplotasplt#設(shè)置3個(gè)坐標(biāo):1,52,7和3,4plt.plot([1,2,3],[5,7,4])plt.show()#顯示折線圖10.4Pandas和Matplotlib繪圖1Matplotlib繪圖折線圖的運(yùn)行后效果如圖10.49所示。10.4Pandas和Matplotlib繪圖1Matplotlib繪圖很多時(shí)候,雖然根據(jù)圖就可以看出一些信息,但是圖形帶有標(biāo)題、軸域上的標(biāo)簽和圖例,解釋該圖的作用也非常有必要。在plot方法中添加label參數(shù)可以指定線條的名稱,通過(guò)title方法指定圖表的名稱,使用xlabel指定橫坐標(biāo)的名稱,使用ylabel指定縱坐標(biāo)的名稱,具體使用方式見(jiàn)示例10.11。10.4Pandas和Matplotlib繪圖1Matplotlib繪圖【示例10.11】importmatplotlibasmplmpl.rcParams['font.sans-serif']=['SimHei']#用來(lái)正常顯示中文標(biāo)簽mpl.rcParams['axes.unicode_minus']=False#用來(lái)正常顯示負(fù)號(hào)#導(dǎo)入pyplot模塊,并取該模塊的別名為pltimportmatplotlib.pyplotasplt#設(shè)置3個(gè)坐標(biāo):1,52,7和3,4plt.plot([1,2,3],[5,7,4])plt.xlabel(u'x軸')#設(shè)置橫坐標(biāo)的名稱plt.ylabel(u'y軸')#設(shè)置縱坐標(biāo)的名稱plt.title(u'圖表')#指定圖表的標(biāo)題plt.legend()#生成默認(rèn)的圖例plt.show()10.4Pandas和Matplotlib繪圖1Matplotlib繪圖折線圖運(yùn)行后的效果如圖10.50所示。圖10.50中
允許以各種形式保存圖形。
允許對(duì)圖形和繪圖配置各種間距選項(xiàng)。importmatplotlibasmplmpl.rcParams['font.sans-serif']=['SimHei']#用來(lái)正常顯示中文標(biāo)簽mpl.rcParams['axes.unicode_minus']=False#用來(lái)正常顯示負(fù)號(hào)importmatplotlib.pyplotaspltbar_width=0.35opacity=0.4plt.bar([1,2,3],[5,7,4],bar_width,alpha=opacity,color='b',label=u'橫坐標(biāo)')plt.show()10.4Pandas和Matplotlib繪圖1Matplotlib繪圖plot()方法中還可以傳入多個(gè)參數(shù),其中第三個(gè)參數(shù)表示線條的顏色及類型,如傳入“r-”值表示紅色的實(shí)線,其中“r”表示紅色,“b”表示藍(lán)色,“-”表示實(shí)線,“-.”表示點(diǎn)畫線,“:”表示虛線,“None”表示什么都不畫。第4個(gè)參數(shù)表示線條的寬度?!臼纠?0.12】使用plt.plot([1,2,3],[5,7,4],'r-',lw=2.5)語(yǔ)句輸出紅色的實(shí)線,線條的寬度為2.5。使用Matplotlib畫柱狀圖時(shí)需要使用pyplot模塊中的bar()方法。10.4Pandas和Matplotlib繪圖1Matplotlib繪圖柱狀圖運(yùn)行后的效果如圖10.51所示。除了折線圖和柱狀圖,Matplotlib還可以繪制餅圖、散點(diǎn)圖等。10.4Pandas和Matplotlib繪圖2Pandas繪圖1.線形圖Series和DataFrame都有一個(gè)用于生成各類圖標(biāo)的plot方法,默認(rèn)情況下,生成的是線型圖?!臼纠?0.13】創(chuàng)建一個(gè)Series對(duì)象和DataFrame對(duì)象,并生成線形圖。frompandasimportSeries,DataFrameimportnumpyasnpimportmatplotlib.pyplotasplts=Series(np.random.randn(10).cumsum(),index=np.arange(0,100,10))s.plot()plt.show()df=DataFrame(np.random.randn(10,4).cumsum(0),columns=['A','B','C','D'],index=np.arange(0,100,10))df.plot()#繪制效果如下plt.show()10.4Pandas和Matplotlib繪圖2Pandas繪圖Series和DataFrame的折線圖顯示如圖10.52所示,其中左側(cè)的圖表為Series對(duì)象由示例10.13可以看出,Series對(duì)象的索引會(huì)被傳給Matplotlib,并用以繪制X軸,可以通過(guò)use_index=False禁用該功能。X軸的刻度和界限可以通過(guò)xticks和xlim選項(xiàng)進(jìn)行調(diào)節(jié)。Y軸就用yticks和ylim進(jìn)行調(diào)節(jié)。10.4Pandas和Matplotlib繪圖2Pandas繪圖2.柱狀圖Series和DataFrame也可以繪制柱狀圖,與折線圖類似,它也使用plot()方法繪制。不過(guò)繪制柱狀圖需要在plot()方法中傳入kind參數(shù)。plot()方法的參數(shù)見(jiàn)表10.5。10.4Pandas和Matplotlib繪圖2Pandas繪圖在DataFrame對(duì)象的plot方法中還有一些獨(dú)有的參數(shù),見(jiàn)表10.6。10.4Pandas和Matplotlib繪圖2Pandas繪圖在生成線形圖的代碼中,加上kind='bar'(垂直柱狀圖)或kind='barh'(水平柱狀圖)即可生成柱狀圖?!臼纠?0.14】創(chuàng)建一個(gè)Series對(duì)象和DataFrame對(duì)象,并生成柱狀圖。frompandasimportSeries,DataFrameimportnumpyasnpimportmatplotlib.pyplotasplts=Series(np
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度材料研發(fā)風(fēng)險(xiǎn)分擔(dān)合同模板3篇
- 2025年度農(nóng)村電商項(xiàng)目合作協(xié)議范本
- 二零二五年度環(huán)保工程臨時(shí)工聘用協(xié)議4篇
- 2025年度新型工業(yè)廠房出租代理協(xié)議書4篇
- 2025年農(nóng)業(yè)信息化SAAS服務(wù)合作協(xié)議3篇
- 二零二五年度貨車租賃合同(含綠色環(huán)保運(yùn)輸)3篇
- 2025年度窗簾裝飾品研發(fā)與市場(chǎng)推廣合同4篇
- 2025年度存量房屋承購(gòu)經(jīng)紀(jì)服務(wù)合同綠色建筑推廣實(shí)施計(jì)劃4篇
- 二零二五年公司內(nèi)部借款合同模板下載及還款責(zé)任3篇
- 全新二零二五年度智能辦公系統(tǒng)采購(gòu)合同2篇
- 巖土工程勘察課件0巖土工程勘察
- 《腎上腺腫瘤》課件
- 2024-2030年中國(guó)典當(dāng)行業(yè)發(fā)展前景預(yù)測(cè)及融資策略分析報(bào)告
- 《乘用車越野性能主觀評(píng)價(jià)方法》
- 幼師個(gè)人成長(zhǎng)發(fā)展規(guī)劃
- 2024-2025學(xué)年北師大版高二上學(xué)期期末英語(yǔ)試題及解答參考
- 動(dòng)物醫(yī)學(xué)類專業(yè)生涯發(fā)展展示
- 批發(fā)面包采購(gòu)合同范本
- 乘風(fēng)化麟 蛇我其誰(shuí) 2025XX集團(tuán)年終總結(jié)暨頒獎(jiǎng)盛典
- 2024年大數(shù)據(jù)分析公司與中國(guó)政府合作協(xié)議
- 一年級(jí)數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)匯編
評(píng)論
0/150
提交評(píng)論