Python與人工智能編程-基礎(chǔ)與實(shí)驗(yàn) 課件 實(shí)驗(yàn)8-10 Pandas基礎(chǔ)知識(shí)、Pandas常用操作、Matplotlib常用操作_第1頁(yè)
Python與人工智能編程-基礎(chǔ)與實(shí)驗(yàn) 課件 實(shí)驗(yàn)8-10 Pandas基礎(chǔ)知識(shí)、Pandas常用操作、Matplotlib常用操作_第2頁(yè)
Python與人工智能編程-基礎(chǔ)與實(shí)驗(yàn) 課件 實(shí)驗(yàn)8-10 Pandas基礎(chǔ)知識(shí)、Pandas常用操作、Matplotlib常用操作_第3頁(yè)
Python與人工智能編程-基礎(chǔ)與實(shí)驗(yàn) 課件 實(shí)驗(yàn)8-10 Pandas基礎(chǔ)知識(shí)、Pandas常用操作、Matplotlib常用操作_第4頁(yè)
Python與人工智能編程-基礎(chǔ)與實(shí)驗(yàn) 課件 實(shí)驗(yàn)8-10 Pandas基礎(chǔ)知識(shí)、Pandas常用操作、Matplotlib常用操作_第5頁(yè)
已閱讀5頁(yè),還剩94頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

Pandas基礎(chǔ)知識(shí)實(shí)驗(yàn)八課程學(xué)習(xí)目標(biāo)了解Pandas的基礎(chǔ)知識(shí)初步了解Pandas的數(shù)據(jù)類型Pandas簡(jiǎn)介Pandas為Python+data+analysis的組合縮寫,是Python中基于NumPy和Matplotlib的第三方數(shù)據(jù)分析庫(kù),與NumPy和Matplotlib共同構(gòu)成了Python數(shù)據(jù)分析的基礎(chǔ)工具包,享有“數(shù)據(jù)分析三劍客”之名。正因?yàn)镻andas是在NumPy基礎(chǔ)上實(shí)現(xiàn),其核心數(shù)據(jù)結(jié)構(gòu)與NumPy的Ndarray十分相似,但Pandas與NumPy的關(guān)系不是替代,而是互為補(bǔ)充。Pandas在數(shù)據(jù)處理上比NumPy更加強(qiáng)大和智能。Pandas的特點(diǎn)Pandas是基于NumPy的一種工具,為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建。Pandas納入了大量庫(kù)和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所需的工具。Pandas提供了大量能使用戶快速便捷地處理數(shù)據(jù)的函數(shù)和方法。Pandas是使Python成為強(qiáng)大而高效的數(shù)據(jù)分析環(huán)境的重要因素之一。Pandas的強(qiáng)大讓人毋庸置疑,一個(gè)集數(shù)據(jù)審閱、處理、分析、可視化于一身的工具,非常好用。Pandas處理數(shù)據(jù)分析的流程讀取數(shù)據(jù):Pandas提供強(qiáng)大的IO讀取工具,csv格式、Excel文件、數(shù)據(jù)庫(kù)等都可以非常簡(jiǎn)便地讀取,對(duì)于大數(shù)據(jù),pandas也支持大文件的分塊讀取。數(shù)據(jù)清洗:如何有效處理缺失值,Pandas把各種類型數(shù)據(jù)類型的缺失值統(tǒng)一稱為NaN,Pandas提供許多方便快捷的方法來(lái)處理這些缺失值NaN。建模階段:Pandas自動(dòng)且明確的數(shù)據(jù)對(duì)齊特性,非常方便地使新的對(duì)象可以正確地與一組標(biāo)簽對(duì)齊,有了這個(gè)特性,Pandas就可以非常方便地將數(shù)據(jù)集進(jìn)行拆分-重組操作。結(jié)果展示:Pandas提供了內(nèi)置的繪圖功能,可以直接使用DataFrame和Series對(duì)象的plot方法進(jìn)行快速的可視化,同時(shí)也可以與Matplotlib結(jié)合進(jìn)行更加復(fù)雜的可視化操作。讀取數(shù)據(jù)-數(shù)據(jù)清洗-分析建模-結(jié)果展示Pandas和NumPy的區(qū)別NumPy和Pandas在數(shù)據(jù)處理方面各有優(yōu)劣,需要根據(jù)實(shí)際需求選擇合適的庫(kù)。如果需要處理結(jié)構(gòu)化數(shù)據(jù),如表格型數(shù)據(jù)或時(shí)間序列數(shù)據(jù)等,可以使用Pandas;如果需要進(jìn)行數(shù)值計(jì)算、模型建立等科學(xué)計(jì)算問(wèn)題,則可以使用NumPy。在實(shí)際應(yīng)用中,兩者也可以結(jié)合使用,以充分發(fā)揮各自的優(yōu)勢(shì)。如果裝了Anaconda,Pandas不用單獨(dú)安裝即可使用。在JupterNotebook中,通常使用如下方法導(dǎo)入Pandas包:importpandasaspdPandas核心數(shù)據(jù)結(jié)構(gòu)Pandas核心數(shù)據(jù)結(jié)構(gòu)有兩種——一維的Series和二維的DataFrame,兩者的關(guān)系像表格中的行與整個(gè)表的關(guān)系。Series即一維數(shù)組,與Python中標(biāo)準(zhǔn)數(shù)據(jù)結(jié)構(gòu)List很像,可以把它想象為表格中的列。對(duì)于列數(shù)據(jù),用戶可以做什么?可以取任意行的數(shù)據(jù)、可以取指定行的數(shù)據(jù)、還可以修改相應(yīng)的數(shù)據(jù),這在Series中也可以實(shí)現(xiàn),對(duì)應(yīng)的分別是Series的切片、索引和修改。DataFrame即二維數(shù)組,也可以說(shuō)是表。同樣的也可以把它理解成整個(gè)表格。想象一下,對(duì)于表格數(shù)據(jù),用戶可以做什么?可以對(duì)列增刪改、可以對(duì)行增刪改、當(dāng)然對(duì)“單元格”數(shù)據(jù)也可以操作。Pandas的主要功能Pandas支持了非常豐富的文件類型,即它可以讀取和保存多種類型的數(shù)據(jù),如:excel文件、csv文件、json文件、sql文件,甚至html文件等,這對(duì)用戶獲取數(shù)據(jù)很方便。Pandas數(shù)據(jù)結(jié)構(gòu)data:一維數(shù)組,ndarray類型或普通列表等;index:數(shù)據(jù)索引標(biāo)簽,如果不指定默認(rèn)從0開(kāi)始;dtype:數(shù)據(jù)類型;name:設(shè)置數(shù)據(jù)集名稱;copy:是否拷貝數(shù)據(jù),默認(rèn)為False。一維數(shù)組Seriespandas.Series(data,index,dtype,name,copy)Series類似于表格中的行或列,可以保存任何數(shù)據(jù)類型。例8.1通過(guò)列表創(chuàng)建一個(gè)數(shù)組存儲(chǔ)幾個(gè)人的名字。importpandasaspd#創(chuàng)建一個(gè)包含幾個(gè)人的名字的列表aa=

["Zhangsan","Lisi","Wangwu"]

#使用pd.Series將列表a轉(zhuǎn)換為Pandas的Series對(duì)象#Series是一種類似于一維數(shù)組的對(duì)象,帶有標(biāo)簽(索引)print(pd.Series(a))一維數(shù)組SeriesPandas數(shù)據(jù)結(jié)構(gòu)觀察結(jié)果可以發(fā)現(xiàn),其自動(dòng)編排索引,且默認(rèn)索引從0開(kāi)始,但是發(fā)現(xiàn)這里dtype是object,變量a中輸入的是str類型,為什么會(huì)出現(xiàn)這個(gè)問(wèn)題呢?其原因在于ndarray,在ndarray中,每個(gè)元素必須要有相同的字節(jié),如int64,float64都是八字節(jié),而str類型的長(zhǎng)度是不固定的,因此它們所占的字節(jié)也不固定,所以類型就變成了object。例8.2將其他信息存入Series。importpandasaspd#創(chuàng)建一個(gè)包含幾個(gè)人的名字的列表aa=

["Zhangsan","Lisi","Wangwu"]#使用pd.Series將列表a轉(zhuǎn)換為Pandas的Series對(duì)象

#-index指定了Series的索引標(biāo)簽為"1","2","3"#-name指定了Series的名稱為"student"#-copy=1表示將列表a復(fù)制一份作為Series的基礎(chǔ)數(shù)據(jù)b=pd.Series(a,index=["1","2","3"],name="student",copy=1)

print(b)

一維數(shù)組SeriesPandas數(shù)據(jù)結(jié)構(gòu)索引變成了前面設(shè)置的123,相應(yīng)的數(shù)據(jù)集名字也變成了前面設(shè)置的“student”。將Series的其他參數(shù)加上。例8.3通過(guò)索引查詢數(shù)據(jù)。importpandasaspd#創(chuàng)建一個(gè)包含鍵值對(duì)的字典a#鍵為整數(shù),值為字符串a(chǎn)={1:"Zhangsan",2:"Lisi",3:"Wangwu"}#使用pd.Series將字典a轉(zhuǎn)換為Pandas的Series對(duì)象

#字典的鍵將作為Series的索引,字典的值將作為Series的元素

b=pd.Series(a)

#打印Series對(duì)象b中索引為2的元素

print(b[2])Series的數(shù)據(jù)檢索Pandas數(shù)據(jù)結(jié)構(gòu)這里設(shè)置了索引值,索引值為2對(duì)應(yīng)的數(shù)據(jù)為“Lisi”。在Series中,用戶可以通過(guò)索引查詢數(shù)據(jù)。Pandas數(shù)據(jù)結(jié)構(gòu)二維數(shù)組DataFramePandas是Python編程語(yǔ)言中用于數(shù)據(jù)分析和操作的流行庫(kù)。DataFrame是pandas提供的一個(gè)核心數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)和操作表格型數(shù)據(jù)(即具有行和列的數(shù)據(jù))。DataFrame

可以看作是一個(gè)二維的、大小可變的、有潛在異構(gòu)類型的表格數(shù)據(jù)結(jié)構(gòu),類似于SQL表或Excel電子表格。例8.4(1)創(chuàng)建一個(gè)二維數(shù)組DataFrame。importpandasaspd#從字典創(chuàng)建DataFrame#字典的鍵將成為DataFrame的列名

#字典的值將成為對(duì)應(yīng)列的數(shù)據(jù)data=

{'Name':

['Alice',

'Bob',

'Charlie'],

#列’Name’的數(shù)據(jù)

'Age':

[25,

32,

18],

'City':

['NewYork',

'Paris',

'London']}

#列’City’的數(shù)據(jù)#使用pd.DataFrame將字典data轉(zhuǎn)換為Pandas的DataFrame對(duì)象df=pd.DataFrame(data)

print(df)二維數(shù)組DataFramePandas數(shù)據(jù)結(jié)構(gòu)#訪問(wèn)單個(gè)列#使用列名訪問(wèn)DataFrame中的單列,返回一個(gè)Series對(duì)象

names=df['Name']

print(names)

#訪問(wèn)多列#使用列名列表訪問(wèn)DataFrame中的多列,返回一個(gè)包含所選列的DataFramesubset=df[['Name',

'Age']]

print(subset)

#訪問(wèn)特定行

#使用整數(shù)位置索引訪問(wèn)DataFrame中的特定行,返回該行的Series對(duì)象

#.iloc用于基于整數(shù)位置(從0開(kāi)始)進(jìn)行行和列的選擇row=df.iloc[0]

#訪問(wèn)第一行(位置為0的行)

print(row)

#訪問(wèn)特定位置的元素

#使用整數(shù)行索引和列名訪問(wèn)DataFrame中的特定單元格的值#.at用于基于標(biāo)簽(索引和列名)進(jìn)行單個(gè)元素的快速訪問(wèn)value=df.at[0,

'Age']

#訪問(wèn)第一行(索引0)中'Age'列的值

print(value)例8.4(2)訪問(wèn)數(shù)據(jù):可以通過(guò)列名或行索引來(lái)訪問(wèn)

DataFrame

中的數(shù)據(jù)。二維數(shù)組DataFramePandas數(shù)據(jù)結(jié)構(gòu)#篩選數(shù)據(jù)

#根據(jù)條件篩選DataFrame中的行

#這里只選擇'Age'列大于20的行filtered_df=df[df['Age']

>

20]

#排序數(shù)據(jù)

#根據(jù)指定列對(duì)DataFrame進(jìn)行排序

#這里按'Age'列的值升序排序sorted_df=df.sort_values(by='Age')

#分組數(shù)據(jù)

#按指定列對(duì)DataFrame進(jìn)行分組,并計(jì)算每組的統(tǒng)計(jì)信息

#這里按'City'列分組,并計(jì)算每組中'Age'列的平均值grouped_df=df.groupby('City')['Age'].mean()

#合并數(shù)據(jù)(假設(shè)有另一個(gè)DataFramedf2)

#根據(jù)共同列將兩個(gè)DataFrame合并

#這里基于'Name'列進(jìn)行合并merged_df=pd.merge(df,df2,on='Name')例8.4(3)數(shù)據(jù)操作:pandas

提供了豐富的數(shù)據(jù)操作功能,如篩選、排序、分組、合并等。二維數(shù)組DataFramePandas數(shù)據(jù)結(jié)構(gòu)#檢查缺失值

#使用isnull()方法檢查DataFrame中的缺失值

#.values.any()檢查是否存在任何缺失值

#如果存在缺失值,則返回True;如果沒(méi)有缺失值,則返回Falsehas_nans=df.isnull().values.any()

#刪除包含缺失值的行

#使用dropna()方法刪除任何包含缺失值的行

#結(jié)果是一個(gè)沒(méi)有缺失值的DataFramedf_clean=df.dropna()

#填充缺失值

#使用fillna()方法填充缺失值

#method='ffill'表示使用前一個(gè)有效值填充缺失值(前向填充)df_filled=df.fillna(method='ffill')

#前向填充例8.4(4)缺失數(shù)據(jù)處理:Pandas

提供了處理缺失數(shù)據(jù)(NaN)的功能。二維數(shù)組DataFramePandas數(shù)據(jù)結(jié)構(gòu)#導(dǎo)出到CSV文件

df.to_csv('data.csv',index=False)

#導(dǎo)出到Excel文件(需要安裝openpyxl或xlwt)

df.to_excel('data.xlsx',index=False)例8.4(5)導(dǎo)出數(shù)據(jù):可以將

DataFrame

導(dǎo)出到多種格式,如CSV、Excel、SQL等。二維數(shù)組DataFramePandas數(shù)據(jù)結(jié)構(gòu)以上是DataFrame的常用操作,Pandas

提供了大量其他功能,包括時(shí)間序列處理、數(shù)據(jù)重塑、性能優(yōu)化等,使其成為數(shù)據(jù)分析和科學(xué)計(jì)算的強(qiáng)大工具。本節(jié)實(shí)驗(yàn)作業(yè)創(chuàng)建一個(gè)字典,用于表示DataFrame數(shù)據(jù),并將其轉(zhuǎn)換為DataFrame;使用NumPy的mean函數(shù)求出所有人的’Salary’平均值;求出每個(gè)人的薪水與平均值之間差距,新的列名取名為’Salary_gap’重新加入DataFrame,并打印出新的DataFrame。

具體操作請(qǐng)查看視頻教程data={'Name':['張三','李四','王五','陳六'],'Age':[25,32,35,40],'Salary':[50000,60000,70000,80000]}Pandas常用操作實(shí)驗(yàn)九課程學(xué)習(xí)目標(biāo)掌握Pandas的兩個(gè)核心數(shù)據(jù)結(jié)構(gòu)掌握Pandas常用數(shù)據(jù)處理方法了解數(shù)據(jù)可視化Pandas數(shù)據(jù)導(dǎo)入Pandas支持非常豐富的文件類型,它可以讀取和保存多種類型的數(shù)據(jù)。導(dǎo)入Excel數(shù)據(jù)Excel數(shù)據(jù)常常導(dǎo)入的是.xls或.xlsx文件。pd.read_excel(io,sheet_name,header)io:表示.xls或.xlsx的文件路徑或類文件對(duì)象,必須是文件的真實(shí)路徑;sheet_name:表示工作表;header:默認(rèn)值為0,取第一行的值為列名,數(shù)據(jù)為除列名以外的數(shù)據(jù),如果數(shù)據(jù)不包含列名,則設(shè)置header=None。Pandas數(shù)據(jù)導(dǎo)入例9.1導(dǎo)入Excel數(shù)據(jù)。importpandasaspd#導(dǎo)入Excel數(shù)據(jù)data=pd.read_excel(r"C:\Users\JOLY\Desktop\test.xlsx",sheet_name=0,header=0)print(data)導(dǎo)入Excel數(shù)據(jù)Pandas數(shù)據(jù)導(dǎo)入filepath_or_buffer:字符串、文件路徑,也可以是URL鏈接;sep:每行數(shù)據(jù)內(nèi)容的分隔符號(hào),CSV中常用’,’分隔;header:指定作為列名的行,默認(rèn)值為0,即取第一行的值為列名。數(shù)據(jù)為除列名以外的數(shù)據(jù),若數(shù)據(jù)不包含列表,則設(shè)置header=None;names:用來(lái)指定列的名稱,類似于列表的序列,不允許有重復(fù)值;usecols:用來(lái)獲取指定列名的數(shù)據(jù);skip_blank_lines:跳過(guò)指定行數(shù);nrows:用于指定需要讀取的行數(shù),常用于較大的數(shù)據(jù);encoding:字符串,默認(rèn)值為None,文件的編碼格式。導(dǎo)入CSV文件pd.read_csv(filepath_or_buffer,sep=,header,encoding=None)除了Excel文件,CSV文件是Pandas另一種重要文件形式,CSV可用記事本打開(kāi)。Pandas數(shù)據(jù)導(dǎo)入例9.2使用read_csv()函數(shù)導(dǎo)入CSV文件。importpandasaspddf=pd.read_csv(r"C:\Users\JOLY\Desktop\los_census.csv",sep=',',encoding='utf-8')pd.set_option('display.unicode.east_asian_width',True)#規(guī)則格式print(df)導(dǎo)入CSV文件Pandas數(shù)據(jù)導(dǎo)入io:字符串、文件路徑,也可以是URL鏈接,網(wǎng)址不接受https;match:正則表達(dá)式;flavor:解釋器,默認(rèn)為’lxml’;header:指定列標(biāo)題所在的行;encoding:文件的編碼格式。注意:導(dǎo)入HTML網(wǎng)頁(yè)數(shù)據(jù)時(shí)只能導(dǎo)入table標(biāo)簽的數(shù)據(jù)。導(dǎo)入HTML網(wǎng)頁(yè)pd.read_html(io,match='.+',flavor,header,encoding)Pandas數(shù)據(jù)導(dǎo)入例9.3使用read_html()函數(shù)導(dǎo)入HTML網(wǎng)頁(yè)。importpandasaspdurl=

'/nba/salaries'#pd.read_html返回的是一個(gè)DataFrame的列表,我們選擇其中一個(gè)DataFramedf_list=pd.read_html(url,header=0)#如果有多個(gè)DataFrame,可以選擇其中一個(gè),或者合并多個(gè)DataFramedf=df_list[0]print(df)#將數(shù)據(jù)保存到CSV文件,確保文件名合法df.to_csv('nba_player_salaries.csv',index=False)導(dǎo)入HTML網(wǎng)頁(yè)P(yáng)andas數(shù)據(jù)操作通過(guò)上面內(nèi)容,可知一個(gè)DataFrame結(jié)構(gòu)大致由三部分組成,分別是列名稱、索引和數(shù)據(jù)。接下來(lái)學(xué)習(xí)針對(duì)DataFrame的基本操作,這里不會(huì)刻意強(qiáng)調(diào)Series,因?yàn)榍懊嬖贒ataFrame上學(xué)習(xí)的大多數(shù)方法和技巧都適用于對(duì)Series進(jìn)行處理,在例9.3中已經(jīng)讀取了一個(gè)外部數(shù)據(jù),這是洛杉磯的人口普查數(shù)據(jù)。有些時(shí)候,讀取的文件很大。如果全部輸出預(yù)覽這些文件,既不美觀,又很耗時(shí)。Pandas提供了head()和tail()方法,它可以幫助用戶只預(yù)覽一小塊數(shù)據(jù)。Pandas數(shù)據(jù)操作例9.4使用df.head()函數(shù)預(yù)覽前五條數(shù)據(jù)。importpandasaspddf=pd.read_csv(r"C:\Users\JOLY\Desktop\los_census.csv",sep=',',encoding='utf-8')pd.set_option('display.unicode.east_asian_width',True)#規(guī)則格式print(df.head())使用df.head()函數(shù)df.head()函數(shù)會(huì)默認(rèn)顯示前五條數(shù)據(jù)。Pandas數(shù)據(jù)操作例9.5使用df.tail()函數(shù)顯示后5條數(shù)據(jù)。importpandasaspddf=pd.read_csv(r"C:\Users\JOLY\Desktop\los_census.csv",sep=',',encoding='utf-8')pd.set_option('display.unicode.east_asian_width',True)#規(guī)則格式print(df.tail(5))使用df.tail()函數(shù)df.tail(n)函數(shù)指定顯示后n條數(shù)據(jù)。Pandas數(shù)據(jù)操作例9.6使用describe()函數(shù)預(yù)覽數(shù)據(jù)集。importpandasaspddf=pd.read_csv(r"C:\Users\JOLY\Desktop\los_census.csv",sep=',',encoding='utf-8')pd.set_option('display.unicode.east_asian_width',True)#規(guī)則格式print(df.describe())使用describe()函數(shù)Pandas還提供統(tǒng)計(jì)和描述性方法,方便用戶從宏觀的角度去了解數(shù)據(jù)集。describe()相當(dāng)于對(duì)數(shù)據(jù)集進(jìn)行概覽,會(huì)輸出該數(shù)據(jù)集每一列數(shù)據(jù)的計(jì)數(shù)、最大值、最小值等。Pandas常用數(shù)據(jù)處理方法在數(shù)據(jù)預(yù)處理過(guò)程中往往會(huì)對(duì)數(shù)據(jù)集進(jìn)行切分,只將需要的某些行、列,或者數(shù)據(jù)塊保留下來(lái),輸出到下一個(gè)流程中去。這也就是所謂的數(shù)據(jù)選擇,或者數(shù)據(jù)索引。由于Pandas的數(shù)據(jù)結(jié)構(gòu)中存在索引、標(biāo)簽,所以可以通過(guò)多軸索引完成對(duì)數(shù)據(jù)的選擇。數(shù)據(jù)選擇基于索引選擇(iloc方法)例9.7打印輸出CSV文件中的前三行數(shù)據(jù)。importpandasaspddf=pd.read_csv(r"C:\Users\JOLY\Desktop\los_census.csv",sep=',',encoding='utf-8')pd.set_option('display.unicode.east_asian_width',True)#規(guī)則格式print(df.iloc[:3])當(dāng)新建一個(gè)DataFrame之后,如果未自己指定行索引或者列對(duì)應(yīng)的標(biāo)簽,那么Pandas會(huì)默認(rèn)從0開(kāi)始以數(shù)字的形式作為行索引,并以數(shù)據(jù)集的第一行作為列對(duì)應(yīng)的標(biāo)簽。其實(shí),這里的列也有數(shù)字索引,默認(rèn)也是從0開(kāi)始,只是未顯示出來(lái)。首先可以基于數(shù)字索引對(duì)數(shù)據(jù)集進(jìn)行選擇,這里使用Pandas中的df.iloc方法,這種方法可接受的類型為整數(shù)、整數(shù)構(gòu)成的列表、布爾數(shù)組、可返回索引值的參數(shù)或索引。同樣以上面的洛杉磯的人口普查數(shù)據(jù)為例,這里選擇前三行的數(shù)據(jù)?;跇?biāo)簽名選擇(loc方法)例9.8打印輸出CSV文件中的前三列數(shù)據(jù)。importpandasaspd#從CSV文件讀取數(shù)據(jù)到DataFramedf=pd.read_csv(r"C:\Users\JOLY\Desktop\los_census.csv",sep=',',encoding='utf-8')pd.set_option('display.unicode.east_asian_width',True)#打印指定列的數(shù)據(jù)

#使用.loc選擇所有行和指定的列名print(df.loc[:,[‘ZipCode’,’TotalPolulation’,’MedianAge’]])除了上述方法,也可以根據(jù)標(biāo)簽對(duì)應(yīng)的名稱進(jìn)行選擇,用到的方法為df.loc,其可以接受的類型為單個(gè)標(biāo)簽、列表或數(shù)組包含的標(biāo)簽、切片對(duì)象、布爾數(shù)組和可返回標(biāo)簽的函數(shù)和參數(shù)。同樣以上面的洛杉磯的人口普查數(shù)據(jù)為例,選擇前三列的數(shù)據(jù)。Pandas常用數(shù)據(jù)處理方法雖然可以通過(guò)數(shù)據(jù)選擇方法從一個(gè)完整的數(shù)據(jù)集中拿到需要的數(shù)據(jù),但有的時(shí)候直接刪除不需要的數(shù)據(jù)更加簡(jiǎn)單直接。在Pandas中,以.drop開(kāi)頭的方法都與數(shù)據(jù)刪減有關(guān)。DataFrame.drop可以直接去掉數(shù)據(jù)集中指定的列和行。一般在使用時(shí)指定labels標(biāo)簽參數(shù),然后再通過(guò)axis指定按行(axis=1)或按列(axis=0)刪除即可。當(dāng)然,也可以通過(guò)索引參數(shù)刪除數(shù)據(jù),具體查看官方文檔。數(shù)據(jù)刪減Pandas常用數(shù)據(jù)處理方法例9.9刪除CSV文件中的兩列。importpandasaspddf=pd.read_csv(r"C:\Users\JOLY\Desktop\los_census.csv",sep=',',encoding='utf-8')pd.set_option('display.unicode.east_asian_width',True)#規(guī)則格式#刪除指定的列

#使用drop()方法刪除列,labels參數(shù)指定要?jiǎng)h除的列名

#axis=1表示按行操作,刪除列'Procedure'和'TotalMales'#返回一個(gè)新的DataFrame,其中不包含這些列print(df.drop(labels=['MedianAge',

'TotalMales'],axis=1))DataFrame.drop_duplicates則通常用于數(shù)據(jù)去重,即剔除數(shù)據(jù)集中的重復(fù)值。使用方法非常簡(jiǎn)單,默認(rèn)情況下,它會(huì)根據(jù)所有列刪除重復(fù)的行。也可以使用subset指定要?jiǎng)h除的特定列上的重復(fù)項(xiàng),要?jiǎng)h除重復(fù)項(xiàng)并保留最后一次出現(xiàn),請(qǐng)使用keep='last'。除此之外,另一個(gè)用于數(shù)據(jù)刪減的方法DataFrame.dropna也十分常用,其主要的用途是刪除缺少值,即數(shù)據(jù)集中空缺的數(shù)據(jù)列或行。數(shù)據(jù)刪減Pandas常用數(shù)據(jù)處理方法既然提到了數(shù)據(jù)刪減,反之則可能會(huì)遇到數(shù)據(jù)填充的情況。而對(duì)于一個(gè)給定的數(shù)據(jù)集而言,一般不會(huì)亂填數(shù)據(jù),而更多的是對(duì)缺失值進(jìn)行填充。在真實(shí)的生產(chǎn)環(huán)境中,需要處理的數(shù)據(jù)文件往往沒(méi)有想象中的那么美好。其中,很大幾率會(huì)遇到的情況就是缺失值。缺失值主要是指數(shù)據(jù)丟失的現(xiàn)象,也就是數(shù)據(jù)集中的某一塊數(shù)據(jù)不存在。除此之外、存在但明顯不正確的數(shù)據(jù)也被歸為缺失值一類。例如,在一個(gè)時(shí)間序列數(shù)據(jù)集中,某一段數(shù)據(jù)突然發(fā)生了時(shí)間流錯(cuò)亂,那么這一小塊數(shù)據(jù)就是毫無(wú)意義的,可以被歸為缺失值。在Pandas中,為了更方便地檢測(cè)缺失值,將不同類型數(shù)據(jù)的缺失均采用NaN(NotaNumber)標(biāo)記,在時(shí)間序列中,時(shí)間戳丟失采用NaT(NotaTime)標(biāo)記。在Pandas中,檢測(cè)缺失值時(shí)主要用2個(gè)方法——isna()和notna(),返回值為布爾值,用于判斷是否為缺失值。數(shù)據(jù)填充Pandas常用數(shù)據(jù)處理方法例9.10生成一個(gè)九行五列的二維數(shù)組,其中元素均為[0,1)區(qū)間中均勻分布的隨機(jī)數(shù),設(shè)置缺失值。importpandasaspd#隨機(jī)生成九行五列的二維數(shù)組,列名為ABCDEdf=pd.DataFrame(np.random.rand(9,

5),columns=list('ABCDE'))#插入T列,并打上時(shí)間戳df.insert(value=pd.Timestamp('2023-11-20'),loc=0,column='Time')#將1,3,5列的2,4,6,8行置為缺失值df.iloc[[1,

3,

5,

7],

[0,

2,

4]]

=np.nan#將2,4,6列的3,5,7,9行置為缺失值df.iloc[[2,

4,

6,

8],

[1,

3,

5]]

=np.nanprint(df)數(shù)據(jù)填充Pandas常用數(shù)據(jù)處理方法例9.11通過(guò)isna()方法確定數(shù)據(jù)集中的缺失值。importpandasaspd#隨機(jī)生成九行五列的二維數(shù)組,列名為ABCDEdf=pd.DataFrame(np.random.rand(9,

5),columns=list('ABCDE'))#插入T列,并打上時(shí)間戳df.insert(value=pd.Timestamp('2023-11-20'),loc=0,column='Time')#將1,3,5列的2,4,6,8行置為缺失值df.iloc[[1,

3,

5,

7],

[0,

2,

4]]

=np.nan#將2,4,6列的3,5,7,9行置為缺失值df.iloc[[2,

4,

6,

8],

[1,

3,

5]]

=np.nanprint(df.isna())數(shù)據(jù)填充面對(duì)缺失值時(shí),一般只有2種方法,即刪除和填充,2種方法都比較極端,所以要根據(jù)實(shí)際需求來(lái)選擇。下面來(lái)了解一下填充缺失值的方法fillna()。Pandas常用數(shù)據(jù)處理方法例9.12對(duì)A~E列用平均值進(jìn)行填充。數(shù)據(jù)填充首先,需要先填充缺失值,第一種方法是用一個(gè)值來(lái)代替NaN,這里用0來(lái)代替,即df.fillna(0);另外也可以通過(guò)參數(shù)將缺失值前或后的值填充給相應(yīng)的缺失值,即df.fillna(method=’pad’)和df.fillna(method=’bfill’);除了上述方法也可以用Pandas自帶的求平均值方法填充特定的行或列,即df.fillna(df.mean()[列(行)n:列(行)m])。importpandasaspd#隨機(jī)生成九行五列的二維數(shù)組,列名為ABCDEdf=pd.DataFrame(np.random.rand(9,

5),columns=list('ABCDE'))#插入T列,并打上時(shí)間戳df.insert(value=pd.Timestamp('2023-11-20'),loc=0,column='Time')#將1,3,5列的2,4,6,8行置為缺失值df.iloc[[1,

3,

5,

7],

[0,

2,

4]]

=np.nan#將2,4,6列的3,5,7,9行置為缺失值df.iloc[[2,

4,

6,

8],

[1,

3,

5]]

=np.nandf2=df.fillna(df.mean()['A':'E'])print(df2)觀察發(fā)現(xiàn),A到E列的缺失值都被平均值填充。Pandas常用數(shù)據(jù)處理方法數(shù)據(jù)填充可以采取插值填充,插值是數(shù)值分析中一種方法。簡(jiǎn)而言之,就是借助于一個(gè)函數(shù)(線性或非線性),再根據(jù)已知數(shù)據(jù)去求解未知數(shù)據(jù)的值。插值在數(shù)據(jù)領(lǐng)域非常常見(jiàn),它的好處在于,可以盡量去還原數(shù)據(jù)本身的樣子??梢酝ㄟ^(guò)interpolate()方法完成線性插值。例9.13隨機(jī)生成一個(gè)DataFrame并設(shè)置缺失值。importpandasaspd#生成一個(gè)DataFrame#使用pd.DataFrame()創(chuàng)建一個(gè)新的DataFrame#其中包含兩個(gè)列'A'和'B',每列包含一些數(shù)據(jù)

#'A'列的數(shù)據(jù)有一個(gè)NaN值(缺失值)

#'B'列的數(shù)據(jù)有兩個(gè)NaN值(缺失值)df=pd.DataFrame({'A':

[1.1,

2.2,np.nan,

4.5,

5.7,

6.9],

'B':

[0.21,np.nan,np.nan,

3.1,

11.7,

13.2]})print(df)觀察這些元素,如果通過(guò)前面所說(shuō)的前后值填充或平均值填充的方法進(jìn)行填充不太能反應(yīng)出來(lái)其趨勢(shì),這時(shí)使用插值填充是最優(yōu)的方法。Pandas常用數(shù)據(jù)處理方法例9.14使用默認(rèn)的線性插值。importpandasaspd#生成一個(gè)DataFrame#其中包含兩個(gè)列'A'和'B',每列包含一些數(shù)據(jù)

#'A'列的數(shù)據(jù)有一個(gè)NaN值(缺失值)

#'B'列的數(shù)據(jù)有兩個(gè)NaN值(缺失值)df=pd.DataFrame({'A':

[1.1,

2.2,np.nan,

4.5,

5.7,

6.9],

'B':

[0.21,np.nan,np.nan,

3.1,

11.7,

13.2]})#使用插值法填充缺失值

#使用erpolate()方法來(lái)進(jìn)行線性插值

#該方法會(huì)基于現(xiàn)有數(shù)據(jù)的值對(duì)缺失值進(jìn)行插值填充

#線性插值默認(rèn)是在每列的數(shù)值之間進(jìn)行,適用于有序數(shù)據(jù)df_interpolate=df.interpolate()print(df_interpolate)數(shù)據(jù)填充Pandas常用數(shù)據(jù)處理方法NumPy,Pandas,Matplotlib構(gòu)成了一個(gè)完善的數(shù)據(jù)分析生態(tài)圈,所以3個(gè)工具的兼容性也非常好,甚至共享了大量的接口。當(dāng)數(shù)據(jù)是以DataFrame格式呈現(xiàn)時(shí),可以直接使用Pandas提供的DataFrame.plot方法調(diào)用Matplotlib接口繪制常見(jiàn)的圖形。數(shù)據(jù)可視化Pandas常用數(shù)據(jù)處理方法例9.15使用插值后的數(shù)據(jù)繪制線形圖。importpandasaspd#生成一個(gè)DataFrame#其中包含兩個(gè)列'A'和'B',每列包含一些數(shù)據(jù)

#'A'列的數(shù)據(jù)有一個(gè)NaN值(缺失值)

#'B'列的數(shù)據(jù)有兩個(gè)NaN值(缺失值)df=pd.DataFrame({'A':

[1.1,

2.2,np.nan,

4.5,

5.7,

6.9],

'B':

[0.21,np.nan,np.nan,

3.1,

11.7,

13.2]})#使用插值法填充缺失值

#使用erpolate()方法來(lái)進(jìn)行線性插值

#該方法會(huì)基于現(xiàn)有數(shù)據(jù)的值對(duì)缺失值進(jìn)行插值填充

#線性插值默認(rèn)是在每列的數(shù)值之間進(jìn)行,適用于有序數(shù)據(jù)df_interpolate=df.interpolate()#繪制插值填充后的DataFrame#使用df_interpolate.plot()繪制插值填充后的DataFrame的圖表

#默認(rèn)情況下,這將生成每列數(shù)據(jù)的線圖,展示了填充后的數(shù)據(jù)趨勢(shì)print(df_interpolate.plot())數(shù)據(jù)可視化Pandas常用數(shù)據(jù)處理方法例9.15通過(guò)改變參數(shù)kind的值選擇柱形圖來(lái)顯示。importpandasaspd#生成一個(gè)DataFrame#其中包含兩個(gè)列'A'和'B',每列包含一些數(shù)據(jù)

#'A'列的數(shù)據(jù)有一個(gè)NaN值(缺失值)

#'B'列的數(shù)據(jù)有兩個(gè)NaN值(缺失值)df=pd.DataFrame({'A':

[1.1,

2.2,np.nan,

4.5,

5.7,

6.9],

'B':

[0.21,np.nan,np.nan,

3.1,

11.7,

13.2]})#使用插值法填充缺失值

#使用erpolate()方法來(lái)進(jìn)行線性插值

#該方法會(huì)基于現(xiàn)有數(shù)據(jù)的值對(duì)缺失值進(jìn)行插值填充

#線性插值默認(rèn)是在每列的數(shù)值之間進(jìn)行,適用于有序數(shù)據(jù)df_interpolate=df.interpolate()#繪制插值填充后的DataFrame#使用df_interpolate.plot(kind='bar')繪制DataFrame的條形圖

#'kind='bar''參數(shù)指定圖表類型為條形圖(Barchart),適用于展示每列數(shù)據(jù)的值print(df_interpolate.plot(kind='bar'))數(shù)據(jù)可視化Pandas常用數(shù)據(jù)處理方法apply函數(shù)DataFrame.apply(self,func,axis=0,raw=False,result_type=None,args=(),**kwargs)Pandas的apply()方法是用來(lái)調(diào)用一個(gè)函數(shù)(Pythonmethod),讓此函數(shù)對(duì)數(shù)據(jù)對(duì)象進(jìn)行批量處理。Pandas的很多對(duì)象都可以使用apply()來(lái)調(diào)用函數(shù),如DataFrame,Series等。在使用apply()方法時(shí),通常放入一個(gè)lambda函數(shù)表達(dá)式或一個(gè)自定義函數(shù)作為操作運(yùn)算,官方給出的DataFrame的apply()用法為:Pandas常用數(shù)據(jù)處理方法func:函數(shù)或lambda表達(dá)式,應(yīng)用于每行或每列;axis:取值范圍為{0or“index”,1or“columns”},默認(rèn)為0;0表示函數(shù)處理的是每一列;1表示函數(shù)處理的是每一行;raw:bool類型,默認(rèn)為False;False表示把每一行或列作為Series傳入函數(shù)中;True表示接受的是ndarray數(shù)據(jù)類型;result_type:取值范圍為:{‘expand’,’reduce’,’broadcast’,None};expand表示列表式的結(jié)果將被轉(zhuǎn)化為列;reduce表示返回一個(gè)Series,而不是展開(kāi)類似列表的結(jié)果,這個(gè)與expand相反;broadcast表示結(jié)果將被廣播到DataFrame的原始形狀,原始索引和列將被保留;args:func的位置參數(shù);**kwargs:作為關(guān)鍵字參數(shù)傳遞給func的其他關(guān)鍵字參數(shù)。apply函數(shù)DataFrame.apply(self,func,axis=0,raw=False,result_type=None,args=(),**kwargs)Pandas常用數(shù)據(jù)處理方法例9.17創(chuàng)建一個(gè)數(shù)據(jù)框,包含三行兩列,每行的值為[4,9],列名分別為’A’,’B’。importpandasaspdimportnumpy

asnp#創(chuàng)建一個(gè)DataFrame#使用pd.DataFrame()創(chuàng)建一個(gè)新的DataFrame#數(shù)據(jù)來(lái)源是一個(gè)二維列表[[4,9]]*3,其中包含三行相同的數(shù)據(jù)[4,9]#列名為'A'和'B'#結(jié)果DataFrame的每一行都是[4,9]df=pd.DataFrame([[4,

9]]

*

3,columns=['A',

'B'])#此行輸出DataFrame,以顯示其數(shù)據(jù)和結(jié)構(gòu)dfapply函數(shù)Pandas常用數(shù)據(jù)處理方法例9.18使用apply函數(shù)對(duì)數(shù)據(jù)框df的每個(gè)元素應(yīng)用平方根函數(shù)。importpandasaspdimportnumpy

asnpdf.apply(np.sqrt)apply函數(shù)Pandas常用數(shù)據(jù)處理方法例9.19使用聚合功能。importpandasaspdimportnumpy

asnp#對(duì)每一列應(yīng)用np.sum函數(shù),計(jì)算每列的和

#axis=0表示按列進(jìn)行操作

#np.sum計(jì)算每列的總和df.apply(np.sum,axis=0)#對(duì)每一列應(yīng)用np.sum函數(shù),計(jì)算每列的和

#axis=1表示按行進(jìn)行操作

#np.sum計(jì)算每列的總和df.apply(np.sum,axis=1)apply函數(shù)Pandas常用數(shù)據(jù)處理方法例9.20在每行上返回類似列表的內(nèi)容。importpandasaspdimportnumpy

asnp#對(duì)每一行應(yīng)用lambda函數(shù)

#lambdax:[1,2]是一個(gè)匿名函數(shù)(lambda函數(shù)),對(duì)每一行返回一個(gè)列表[1,2]#axis=1表示按行進(jìn)行操作

#結(jié)果是一個(gè)DataFrame,其中每一行都被替換為[1,2],形成一個(gè)新的DataFramedf.apply(lambdax:

[1,

2],axis=1)apply函數(shù)Pandas常用數(shù)據(jù)處理方法例9.21使用result_type=‘expand’將類似列表的結(jié)果擴(kuò)展到數(shù)據(jù)的列。importpandasaspdimportnumpy

asnp#對(duì)每一行應(yīng)用lambda函數(shù)

#lambdax:[1,2]是一個(gè)匿名函數(shù)(lambda函數(shù)),對(duì)每一行返回一個(gè)列表[1,2]#axis=1表示按行進(jìn)行操作

#result_type='expand'參數(shù)將結(jié)果展開(kāi)放入DataFrame的新列中

#結(jié)果是一個(gè)DataFrame,每一行都被替換為[1,2],并且'expand'參數(shù)使得每個(gè)列表元素都成為獨(dú)立的列df.apply(lambdax:

[1,

2],axis=1,result_type='expand')apply函數(shù)Pandas常用數(shù)據(jù)處理方法例9.22在函數(shù)中返回一個(gè)序列,生成的列名將是序列索引。importpandasaspdimportnumpy

asnp#對(duì)每一行應(yīng)用lambda函數(shù)

#lambdax:pd.Series([1,2],index=['foo','bar'])是一個(gè)匿名函數(shù)(lambda函數(shù))

#對(duì)每一行返回一個(gè)包含指定索引的pd.Series#axis=1表示按行進(jìn)行操作

#結(jié)果是一個(gè)DataFrame,其中每一行的處理結(jié)果將被展開(kāi)放入DataFrame的新列中,列名由pd.Series指定df.apply(lambdax:pd.Series([1,

2],index=['foo',

'bar']),axis=1)apply函數(shù)Pandas常用數(shù)據(jù)處理方法例9.23使用result_type=‘broadcast’確保函數(shù)返回相同的形狀結(jié)果,生成的列名是原始列名。importpandasaspdimportnumpy

asnp#對(duì)每一行應(yīng)用lambda函數(shù)

#lambdax:[1,2]是一個(gè)匿名函數(shù)(lambda函數(shù)),對(duì)每一行返回一個(gè)列表[1,2]#axis=1表示按行進(jìn)行操作

#result_type='broadcast'參數(shù)將結(jié)果廣播到原始DataFrame的形狀

#即每一行都將被替換為[1,2],且'broadcast'參數(shù)會(huì)將這個(gè)結(jié)果復(fù)制到原始DataFrame的每一行df.apply(lambdax:

[1,

2],axis=1,result_type='broadcast')apply函數(shù)Pandas常用數(shù)據(jù)處理方法例9.24Series使用apply函數(shù)。importpandasaspd

#創(chuàng)建一個(gè)帶有城市名稱作為索引的PandasSeries#數(shù)據(jù)為20,21,12,分別對(duì)應(yīng)'London'(倫敦)、'NewYork'(紐約)、'Helsinki'(赫爾辛基)

s=pd.Series([20,21,12],index=['London','NewYork','Helsinki’])

#輸出Series

print(s)apply函數(shù)Pandas常用數(shù)據(jù)處理方法例9.25定義函數(shù)并將其作為參數(shù)傳遞給apply,求值的平方。#定義一個(gè)函數(shù)square(x),用于計(jì)算輸入值的平方def

square(x):

returnx**

2#使用Series的apply方法將square函數(shù)應(yīng)用到Series的每個(gè)元素上

#apply(square)會(huì)對(duì)Series中的每一個(gè)元素調(diào)用square函數(shù)

#結(jié)果是一個(gè)新的Series,其中每個(gè)元素都是原始元素的平方s.apply(square)apply函數(shù)Pandas常用數(shù)據(jù)處理方法例9.26將匿名函數(shù)作為參數(shù)傳遞給apply。importpandasaspdimportnumpy

asnp#使用Series的apply方法與lambda函數(shù)將每個(gè)元素平方

#lambdax:x**2是一個(gè)匿名函數(shù),對(duì)每個(gè)輸入x計(jì)算其平方

#apply(lambdax:x**2)將這個(gè)lambda函數(shù)應(yīng)用到Seriess的每個(gè)元素上

#結(jié)果是一個(gè)新的Series,其中每個(gè)元素都是原始元素的平方s.apply(lambdax:x**

2)apply函數(shù)Pandas常用數(shù)據(jù)處理方法例9.27定義一個(gè)自定義函數(shù),用于從Series中的每個(gè)元素中減去一個(gè)指定值,并將結(jié)果應(yīng)用到Series的每個(gè)元素上。def

subtract_custom_value(x,custom_value):#從x中減去custom_value

returnx-custom_value#apply方法用于對(duì)Series中的每一個(gè)元素應(yīng)用一個(gè)函數(shù)s.apply(subtract_custom_value,args=(5,))apply函數(shù)Pandas常用數(shù)據(jù)處理方法例9.28定義一個(gè)接受關(guān)鍵字參數(shù)并將這些參數(shù)傳遞給apply的自定義函數(shù)。#定義一個(gè)函數(shù)add_custom_values(x,**kwargs)#這個(gè)函數(shù)接受一個(gè)輸入x和任意數(shù)量的關(guān)鍵字參數(shù)(kwargs)

#對(duì)于每一個(gè)關(guān)鍵字參數(shù)(即月份名稱),函數(shù)將其對(duì)應(yīng)的值加到xdef

add_custom_values(x,

**kwargs):

formonthinkwargs:x+=kwargs[month]

returnx#使用Series的apply方法將add_custom_values函數(shù)應(yīng)用到Series的每個(gè)元素上

#通過(guò)關(guān)鍵字參數(shù)將額外的值傳遞給add_custom_values函數(shù)

#這里傳遞了三個(gè)關(guān)鍵字參數(shù):june=30,july=20,august=25#函數(shù)將這些值依次加到Series中的每個(gè)元素上s.apply(add_custom_values,june=30,july=20,august=25)apply函數(shù)總之,apply方法都是通過(guò)傳入一個(gè)函數(shù)或者lambda表達(dá)式對(duì)數(shù)據(jù)進(jìn)行批量處理。Pandas知識(shí)總結(jié)本節(jié)實(shí)驗(yàn)作業(yè)數(shù)據(jù)讀?。簩ⅰ叭嗣襻t(yī)院銷售數(shù)據(jù).xlsx”保存在C盤根目錄下,使用read_excel讀入數(shù)據(jù);使用del刪除多余的列,并使用describe()和info()查看一些總體描述信息,使用shape方法查看有多少行和列;使用loc方法,顯示前12行的“商品名稱”:“實(shí)收金額”;使用apply方法,給出評(píng)價(jià):如果應(yīng)收金額小于10,顯示“虧本”,如果應(yīng)收金額大于或等于10,顯示“保本”,否則顯示“盈利”。具體操作請(qǐng)查看視頻教程Matplotlib常用操作實(shí)驗(yàn)十課程學(xué)習(xí)目標(biāo)理解Matplotlib的基本概念掌握基本繪圖及圖形樣式、多子圖和布局管理掌握3D圖形的繪制Matplotlib介紹Matplotlib是一個(gè)Python的2D繪圖庫(kù),它以各種硬拷貝和跨平臺(tái)交互式環(huán)境生成出版質(zhì)量級(jí)別的圖形,通過(guò)Matplotlib,開(kāi)發(fā)者可以僅需要幾行代碼便可以生成繪圖,具有以下特點(diǎn):可以創(chuàng)建圖形,包括線形圖、條形圖、散點(diǎn)圖、餅圖、直方圖等??啥ㄖ茍D形的各個(gè)屬性,包括圖形的大小、顏色、線性、標(biāo)簽、注釋等。支持多種底層繪圖庫(kù),包括Tkinter、wxPython、Qt、GTK等。Matplotlib通常被用于數(shù)據(jù)分析、科學(xué)研究、工程設(shè)計(jì)和教學(xué)演示等領(lǐng)域,它可以幫助人們更加清晰直觀地展示數(shù)據(jù)和圖形,并從中提取出各種數(shù)據(jù)特征。Matplotlib常見(jiàn)圖繪制nrows,ncols:整數(shù),默認(rèn)為1,分別設(shè)置坐標(biāo)軸的排列;sharex,sharey:布爾類型或是{“none”,“all”,“row”,“col”}字典類型,默認(rèn)為False,用來(lái)指定各子圖之間是否共用xy軸屬性;True或“all”:在所有圖像之間共享x,y軸屬性;False或“none”:每個(gè)圖像的x,y軸屬性都是獨(dú)立的;“row”:進(jìn)行橫向?qū)傩怨蚕恚弧癱ol”:進(jìn)行縱向?qū)傩怨蚕?。圖形基礎(chǔ)結(jié)構(gòu)subplots(nrows=1,ncols=1,sharex=False,sharey=False,squeeze=True,subplot_kw=None,gridspec_kw=None,**fig_kw)Figure對(duì)象Matplotlib的圖形基礎(chǔ)結(jié)構(gòu)由Figure對(duì)象和Axes對(duì)象組成。Figure對(duì)象表示整個(gè)圖形的窗口或頁(yè)面,可以包含多個(gè)子圖(Axes對(duì)象)。要?jiǎng)?chuàng)建Figure對(duì)象,可以調(diào)用subplots()函數(shù)。圖形基礎(chǔ)結(jié)構(gòu)例10.1通過(guò)nrows、ncols參數(shù)生成2行2列個(gè)子圖像。#導(dǎo)入模塊importmatplotlib.pyplotaspltimportnumpy

asnp#生成2行2列個(gè)子圖像fig,axs=plt.subplots(nrows=2,ncols=2)Figure對(duì)象這里也可以創(chuàng)建一個(gè)帶有兩個(gè)子圖的圖表,并將圖表對(duì)象以及兩個(gè)子圖對(duì)象分別賦值給變量f、ax1、ax2。圖形基礎(chǔ)結(jié)構(gòu)例10.2創(chuàng)建帶有兩個(gè)子圖的圖表,并將其分別賦值給不同變量。#導(dǎo)入模塊importmatplotlib.pyplotaspltimportnumpy

asnp#使用plt.subplots()函數(shù)創(chuàng)建一個(gè)圖形和兩個(gè)子圖

#f是圖形對(duì)象(Figure),ax1和ax2是兩個(gè)子圖對(duì)象(Axes)

#參數(shù)(1,2)表示創(chuàng)建一個(gè)包含1行2列子圖的布局f,

(ax1,ax2)

=plt.subplots(1,

2)Figure對(duì)象通過(guò)sharex,sharey參數(shù)可以使同行子圖共用y軸屬性、同列子圖共用x軸屬性。圖形基礎(chǔ)結(jié)構(gòu)例10.3使用sharex、sharey參數(shù)。#導(dǎo)入模塊importmatplotlib.pyplotaspltimportnumpy

asnp#使用plt.subplots()函數(shù)創(chuàng)建一個(gè)圖形和四個(gè)子圖

#fig是圖形對(duì)象(Figure),axs是一個(gè)包含子圖對(duì)象的二維數(shù)組

#參數(shù)(2,2)表示創(chuàng)建一個(gè)包含2行2列子圖的布局

#sharex=True:共享x軸刻度#sharey=True:共享y軸刻度f(wàn)ig,axs=plt.subplots(2,2,sharex=True,sharey=True)Figure對(duì)象squeeze參數(shù)為True,只創(chuàng)建一個(gè)子圖時(shí),返回的坐標(biāo)軸對(duì)象是一個(gè)標(biāo)量,即ax是個(gè)標(biāo)量,可以直接引用。圖形基礎(chǔ)結(jié)構(gòu)例10.4創(chuàng)建一個(gè)子圖,返回坐標(biāo)軸對(duì)象。#使用plt.subplots()函數(shù)創(chuàng)建一個(gè)圖形和一個(gè)子圖

#fig是圖形對(duì)象(Figure),ax是單個(gè)子圖對(duì)象(Axes)

#參數(shù)squeeze=True表示如果子圖只有一個(gè),則返回一個(gè)單一的Axes對(duì)象,而不是包含一個(gè)子圖的數(shù)組fig,ax=plt.subplots(squeeze=True)#使用ax.plot()方法在子圖上繪制數(shù)據(jù)

#np.arange(5)生成一個(gè)包含0到4的數(shù)組,作為y軸的數(shù)據(jù)

#x軸的數(shù)據(jù)為[0,1,2,3,4],對(duì)應(yīng)y軸的數(shù)據(jù)[0,1,2,3,4]ax.plot(np.arange(5))Figure對(duì)象當(dāng)創(chuàng)建的是一行或一列的子圖像時(shí),返回的是一維數(shù)列對(duì)象。圖形基礎(chǔ)結(jié)構(gòu)例10.5創(chuàng)建一行或一列子圖像,返回一維數(shù)列對(duì)象。#使用plt.subplots()函數(shù)創(chuàng)建一個(gè)圖形和兩個(gè)子圖

#fig是圖形對(duì)象(Figure),axs是包含兩個(gè)子圖對(duì)象的數(shù)組(Axes)

#參數(shù)(1,2)表示創(chuàng)建一個(gè)1行2列的子圖布局

#參數(shù)squeeze=True表示如果子圖的數(shù)量正好是1行2列,則返回一個(gè)包含兩個(gè)子圖的數(shù)組fig,axs=plt.subplots(1,

2,squeeze=True)#在第一個(gè)子圖(axs[0])上繪制數(shù)據(jù)

#np.arange(5)生成一個(gè)包含0到4的數(shù)組作為y軸數(shù)據(jù)

#x軸的數(shù)據(jù)為[0,1,2,3,4],對(duì)應(yīng)y軸的數(shù)據(jù)[0,1,2,3,4]axs[0].plot(np.arange(5))#在第二個(gè)子圖(axs[1])上繪制數(shù)據(jù)

#np.arange(4)生成一個(gè)包含0到3的數(shù)組作為y軸數(shù)據(jù)

#x軸的數(shù)據(jù)為[0,1,2,3],對(duì)應(yīng)y軸的數(shù)據(jù)[0,1,2,3]axs[1].plot(np.arange(4))Figure對(duì)象當(dāng)創(chuàng)建的是多行多列的子圖像時(shí),返回坐標(biāo)軸對(duì)象是一個(gè)二維數(shù)組。圖形基礎(chǔ)結(jié)構(gòu)例10.6創(chuàng)建多行多列子圖像,返回二維數(shù)組對(duì)象。#使用plt.subplots()函數(shù)創(chuàng)建一個(gè)圖形和四個(gè)子圖

#fig是圖形對(duì)象(Figure),axs是包含四個(gè)子圖對(duì)象的二維數(shù)組(Axes)

#參數(shù)(2,2)表示創(chuàng)建一個(gè)2行2列的子圖布局

#參數(shù)squeeze=True表示如果子圖的數(shù)量正好是2行2列,則返回一個(gè)包含四個(gè)子圖對(duì)象的二維數(shù)組fig,axs=plt.subplots(2,

2,squeeze=True)#創(chuàng)建x數(shù)據(jù),范圍從0到3,共有100個(gè)點(diǎn)x=np.linspace(0,

3,

100)#在第一個(gè)子圖(axs[0,0])上繪制y=x的圖形

#x數(shù)據(jù)作為x軸,x數(shù)據(jù)本身作為y軸axs[0,0].plot(x,x)#在第二個(gè)子圖(axs[0,1])上繪制y=x^2的圖形

#x數(shù)據(jù)作為x軸,x的平方作為y軸axs[0,1].plot(x,x**2)#在第三個(gè)子圖(axs[1,0])上繪制y=x^3的圖形#x數(shù)據(jù)作為x軸,x的立方作為y軸axs[1,0].plot(x,x**3)#在第四個(gè)子圖(axs[1,1])上繪制y=x^4的圖形

#x數(shù)據(jù)作為x軸,x的四次方作為y軸axs[1,1].plot(x,x**4)Figure對(duì)象圖形基礎(chǔ)結(jié)構(gòu)例10.7使用subplot_kw參數(shù)創(chuàng)建極坐標(biāo)系。#使用plt.subplots()函數(shù)創(chuàng)建一個(gè)圖形和一個(gè)極坐標(biāo)子圖

#fig是圖形對(duì)象(Figure),axs是極坐標(biāo)子圖對(duì)象(Axes)

#參數(shù)subplot_kw=dict(polar=True)表示創(chuàng)建一個(gè)極坐標(biāo)子圖

#polar=True表示子圖將使用極坐標(biāo)系進(jìn)行繪圖fig,axs=plt.subplots(subplot_kw=dict(polar=True))Figure對(duì)象圖形基礎(chǔ)結(jié)構(gòu)例10.8創(chuàng)建Axes對(duì)象。importmatplotlib.pyplotaspltfig,axs=plt.subplots(2,

3)

#創(chuàng)建2x3的子圖集合ax1=axs[0,

0]

#獲取第1個(gè)子圖ax2=axs[0,

1]

#獲取第2個(gè)子圖ax3=axs[1,

0]

#獲取第3個(gè)子圖ax4=axs[1,

1]

#獲取第4個(gè)子圖ax5=axs[1,

2]

#獲取第5個(gè)子圖Axes對(duì)象Axes對(duì)象表示子圖包含一個(gè)或多個(gè)坐標(biāo)軸、圖形和文本等元素。要?jiǎng)?chuàng)建Axes對(duì)象,可以在subplots()函數(shù)中指定行數(shù)、列數(shù)和子圖編號(hào)。繪制曲線圖及散點(diǎn)圖例10.9使用plot()繪制散點(diǎn)圖。importmatplotlib.pyplotaspltimportnumpy

asnp#創(chuàng)建x數(shù)據(jù),范圍從0到10,共有100個(gè)點(diǎn)x=np.linspace(0,

10,

100)#計(jì)算y數(shù)據(jù),y是x的正弦值y=np.sin(x)#創(chuàng)建一個(gè)圖形對(duì)象和一個(gè)子圖對(duì)象fig,ax=plt.subplots()#在子圖上繪制x和y的圖形

#'ro--'參數(shù)表示使用紅色圓點(diǎn)標(biāo)記('r')和虛線('--')繪制

#label='sin(x)'為該數(shù)據(jù)系列添加標(biāo)簽ax.plot(x,y,

'ro--',label='sin(x)')#顯示圖例,圖例包括label參數(shù)中指定的標(biāo)簽ax.legend()點(diǎn)的標(biāo)記和線條風(fēng)格Matplotlib中可以使用不同的標(biāo)記和線條風(fēng)格來(lái)繪制散點(diǎn)圖和曲線圖。這個(gè)代碼用NumPy生成一組x和y值,然后利用plot()函數(shù)繪制散點(diǎn)圖并指定顏色標(biāo)記、線條風(fēng)格和圖例標(biāo)簽。另外使用了legend()函數(shù)來(lái)顯示圖像。繪制曲線圖及散點(diǎn)圖坐標(biāo)軸和刻度線在Matplotlib中可以用xlabel()、ylabel()、title()函數(shù)來(lái)設(shè)置坐標(biāo)軸和圖形標(biāo)題,用xticks()、yticks()

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論