《數(shù)據(jù)采集與處理:基于python》 課件 第3章-Numpy與Pandas基礎(chǔ)_第1頁
《數(shù)據(jù)采集與處理:基于python》 課件 第3章-Numpy與Pandas基礎(chǔ)_第2頁
《數(shù)據(jù)采集與處理:基于python》 課件 第3章-Numpy與Pandas基礎(chǔ)_第3頁
《數(shù)據(jù)采集與處理:基于python》 課件 第3章-Numpy與Pandas基礎(chǔ)_第4頁
《數(shù)據(jù)采集與處理:基于python》 課件 第3章-Numpy與Pandas基礎(chǔ)_第5頁
已閱讀5頁,還剩53頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章

numpy與pandas基礎(chǔ)《數(shù)據(jù)采集與處理:基于Python》2024/5/1112024/5/112教學(xué)目標(biāo)本章學(xué)習(xí)目標(biāo)1.了解numpy和pandas的常用數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)類型及其用途;2.掌握numpy多維數(shù)組的創(chuàng)建、存取、運算及數(shù)組間的合并、拆分等常見操作;3.理解pandas中Series和DataFrame的特點及與numpy多維數(shù)組的區(qū)別,掌握它們的創(chuàng)建、存取、運算等常用操作方法。本章提綱1、numpy基礎(chǔ)2、pandas基礎(chǔ)numpy基礎(chǔ)2024/5/113為什么選擇numpyPython自身的嵌套列表結(jié)構(gòu)(nestedliststructure)的運行和存儲效率較低,不能適應(yīng)大規(guī)模的數(shù)值計算、元素操作及矩陣運算等。而numpy模塊則比嵌套列表高效得多,并且支持大量的多維數(shù)組與矩陣運算,針對數(shù)組運算還提供了大量的數(shù)學(xué)函數(shù)庫。numpy(即numericPython)的前身為Numeric,最早由JimHugunin與其他協(xié)作者共同開發(fā)。2005年,TravisOliphant在Numeric中結(jié)合了另一個同性質(zhì)的程序庫numarray的特色,并加入了其他擴(kuò)展,從而開發(fā)了numpy。numpy開放源代碼,并且由許多協(xié)作者共同維護(hù)開發(fā)。numpy專為嚴(yán)格的數(shù)字處理而生,提供了許多高級的數(shù)值編程工具,如矩陣數(shù)據(jù)類型、矢量處理以及精密的運算庫。numpy多為大型金融公司使用,一些核心的科學(xué)計算組織(如LawrenceLivermore、NASA)也用其處理本來使用C、Fortran或Matlab等完成的任務(wù)。numpy模塊庫包括一個強(qiáng)大的n維數(shù)組對象array,比較成熟的函數(shù)庫,用于整合C/C和Fortran代碼的工具包,實用的線性代數(shù)、傅里葉變換和隨機(jī)數(shù)生成函數(shù)。numpy和稀疏矩陣運算包scipy配合使用會更加方便。2024/5/114numpy數(shù)據(jù)類型numpy支持的數(shù)據(jù)類型比Python內(nèi)置的數(shù)據(jù)類型多,基本上可以和C語言的數(shù)據(jù)類型對應(yīng),其中部分類型對應(yīng)Python內(nèi)置的數(shù)據(jù)類型。numpy的數(shù)值類型實際上是dtype對象的實例,并對應(yīng)唯一的字符,包括np.bool_,32,np.float32等。表3-1列舉了常用的numpy數(shù)據(jù)類型。numpy提供了兩種基本對象:ndarray(n-dimensionalarrayobject)和ufunc(universalfunctionobject)。ndarray(下文統(tǒng)一稱為數(shù)組)是存儲單一數(shù)據(jù)類型的多維數(shù)組,而ufunc則是能夠?qū)?shù)組進(jìn)行處理的函數(shù)。2024/5/115名稱描述bool_布爾類型(True或者False)int_默認(rèn)的整數(shù)類型(類似于C語言中的long、int32或int64)intc與C語言的int類型一樣,一般是int32或int64intp用于索引的整數(shù)類型(類似于C語言中的ssize_t,一般情況下仍然是int32或int64)int8字節(jié)(-128~127)int16整數(shù)(-32768~32767)int32整數(shù)(-2147483648~2147483647)int64整數(shù)(-9223372036854775808~9223372036854775807)uint8無符號整數(shù)(0~255)uint16無符號整數(shù)(0~65535)uint32無符號整數(shù)(0~4294967295)uint64無符號整數(shù)(0~18446744073709551615)float_float64類型的簡寫float16半精度浮點數(shù),包括1個符號位、5個指數(shù)位、10個尾數(shù)位float32單精度浮點數(shù),包括1個符號位、8個指數(shù)位、23個尾數(shù)位名稱描述float64雙精度浮點數(shù),包括1個符號位、11個指數(shù)位、52個尾數(shù)位complex_complex128類型的簡寫,即128位復(fù)數(shù)complex64復(fù)數(shù),表示雙32位浮點數(shù)(實數(shù)部分和虛數(shù)部分)complex128復(fù)數(shù),表示雙64位浮點數(shù)(實數(shù)部分和虛數(shù)部分)數(shù)據(jù)類型ndarray1.ndarray簡介numpy提供了一個n維數(shù)組類型ndarray,它描述了相同類型的items的集合,如圖3-1所示。2024/5/116數(shù)據(jù)類型ndarrayndarray與原生Python列表有很大區(qū)別。首先,如圖3-1所示,ndarray在存儲數(shù)據(jù)時,數(shù)據(jù)與數(shù)據(jù)的地址都是連續(xù)的,這樣就使得批量操作數(shù)組元素時的速度更快。這是因為ndarray中所有元素的類型都是相同的,而Python列表中的元素類型是任意的,所以ndarray在存儲元素時內(nèi)存可以連續(xù),而原生Python列表只能通過尋址方式找到下一個元素。這雖然導(dǎo)致了在通用性能方面numpy的ndarray不及原生Python列表,但在科學(xué)計算中,numpy的ndarray可以省掉很多循環(huán)語句,代碼使用方面比原生Python列表簡單得多。其次,numpy內(nèi)置了并行運算功能,當(dāng)系統(tǒng)有多個核心時,若進(jìn)行某種計算,numpy會自動并行計算。另外,numpy底層使用C語言編寫,數(shù)組中直接存儲對象,而不是存儲對象指針,所以其運算效率遠(yuǎn)高于純Python代碼。2024/5/117數(shù)據(jù)類型ndarray2.numpy數(shù)組屬性numpy數(shù)組的維數(shù)稱為秩(rank),秩就是軸(axis)的數(shù)量,即數(shù)組的維度(dimension),一維數(shù)組的秩為1,二維數(shù)組的秩為2,依此類推。在numpy中,每個線性數(shù)組稱為一個軸,即維度。比如,二維數(shù)組相當(dāng)于兩個一維數(shù)組,其中第一個一維數(shù)組中的每個元素又是一個一維數(shù)組。所以一維數(shù)組就是numpy中的軸,第一個軸相當(dāng)于底層數(shù)組,第二個軸是底層數(shù)組里的數(shù)組。而軸的數(shù)量——秩就是數(shù)組的維數(shù)。很多時候可以聲明axis。axis=0表示沿著第0軸進(jìn)行操作,即對每一列進(jìn)行操作;axis=1表示沿著第1軸進(jìn)行操作,即對每一行進(jìn)行操作。numpy數(shù)組中比較重要的ndarray對象屬性如表3-2所示。2024/5/118屬性說明ndarray.ndim秩,即軸的數(shù)量或維度的數(shù)量ndarray.shape數(shù)組的維度,對于矩陣是n行m列ndarray.size數(shù)組元素的總個數(shù),相當(dāng)于ndarray.shape中n×m的值ndarray.dtypendarray對象的元素類型ndarray.itemsizendarray對象中每個元素的大小,以字節(jié)為單位ndarray.flagsndarray對象的內(nèi)存信息ndarray.data包含實際數(shù)組元素的緩沖區(qū),由于一般通過數(shù)組的索引獲取元素,所以通常不需要使用這個屬性創(chuàng)建數(shù)組1.通過序列對象創(chuàng)建數(shù)組可以通過給numpy模塊的array函數(shù)傳遞Python的序列對象來創(chuàng)建數(shù)組,如果傳遞的是多層嵌套的序列,將創(chuàng)建多維數(shù)組(例如下面的示例程序中的變量c)。示例程序如下:2024/5/119importnumpyasnp#導(dǎo)入numpy模塊,后面習(xí)慣使用別名npa=np.array([1,2,3,4])b=np.array((5,6,7,8))c=np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])b#返回結(jié)果:array([5,6,7,8])c #返回結(jié)果:array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])c.dtype #數(shù)組的元素類型可通過dtype屬性獲得,返回結(jié)果:dtype(int32)a.shape#一維數(shù)組,返回結(jié)果:(4,)c.shape #二維數(shù)組中,第0軸的長度為3,第1軸的長度為4,返回結(jié)果:(3,4)c.shape=4,3#注意,從(3,4)改為(4,3)并不是對數(shù)組進(jìn)行轉(zhuǎn)置,而只是改變了每個軸的大小,數(shù)組元素在內(nèi)存中的位置并沒有改變c #返回結(jié)果:array([[1,2,3],[4,4,5],[6,7,7],[8,9,10]])c.shape=2,-1#當(dāng)某個軸的元素為-1時,將根據(jù)數(shù)組元素的個數(shù)自動計算此軸的長度,因此下面的程序?qū)?shù)組c的shape改為了(2,6)c #返回結(jié)果:array([[1,2,3,4,4,5],[6,7,7,8,9,10]])創(chuàng)建數(shù)組可以使用數(shù)組對象的shape屬性查看或改變數(shù)組的形狀,也可以使用reshape函數(shù)改變數(shù)組的形狀,但數(shù)組對象改變形狀后返回的對象與原數(shù)組共享同一個內(nèi)存區(qū)域,因此,修改其中任意一個數(shù)組的元素都會同時修改另外一個數(shù)組。示例程序如下:數(shù)組的元素類型可以通過dtype屬性獲得,利用dtype參數(shù)在創(chuàng)建數(shù)組時指定元素的類型。示例程序如下:2024/5/1110d=a.reshape((2,2))#使用數(shù)組的reshape函數(shù)可以創(chuàng)建一個改變了尺寸的新數(shù)組,原數(shù)組的shape保持不變d#返回結(jié)果:array([[1,2],[3,4]])a #返回結(jié)果:array([1,2,3,4])a[1]=100 #將數(shù)組a的第2個元素改為100d #注意,數(shù)組d中的2也被改變了,返回結(jié)果:array([[1,100],[3,4]])np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]],dtype=np.float)#返回結(jié)果:array([[1.,2.,3.,4.], [4.,5.,6.,7.], [7.,8.,9.,10.]])np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]],dtype=plex)#返回結(jié)果:array([[1.+0.j,2.+0.j,3.+0.j,4.+0.j], [4.+0.j,5.+0.j,6.+0.j,7.+0.j], [7.+0.j,8.+0.j,9.+0.j,10.+0.j]])創(chuàng)建數(shù)組2.通過特定函數(shù)創(chuàng)建數(shù)組上面的例子都是先創(chuàng)建一個Python序列,然后通過array函數(shù)將其轉(zhuǎn)換為數(shù)組,這樣做的效率顯然不高。因此,numpy提供了很多專門用來創(chuàng)建數(shù)組的函數(shù),也可以創(chuàng)建指定形狀和類型的數(shù)組,如表3-3所示。此外,zeros_like、ones_like、empty_like等函數(shù)可創(chuàng)建與參數(shù)數(shù)組的形狀及類型相同的數(shù)組。因此,“zeros_like(a)”和“zeros(a.shape,a.dtype)”的效果相同。還可以使用frombuffer、fromstring、fromfile、fromfunction等函數(shù),從字節(jié)序列、文件中創(chuàng)建數(shù)組。2024/5/1111函數(shù)功能說明示例arange類似于Python的range函數(shù),通過指定起始值、終值和步長來創(chuàng)建一維數(shù)組,注意,數(shù)組不包括終值np.arange(0,1,0.1)linspace通過指定起始值、終值和元素個數(shù)來創(chuàng)建一維數(shù)組,可以通過endpoint關(guān)鍵字指定是否包括終值,缺省設(shè)置是包括終值np.linspace(0,1,10):步長為1/9logspace和linspace類似,不過它創(chuàng)建等比數(shù)列np.logspace(0,2,20):產(chǎn)生1(100)~100(102)、有20個元素的等比數(shù)列zeros創(chuàng)建指定形狀、數(shù)值為0的數(shù)組np.zeros(4,np.float)ones創(chuàng)建指定形狀、數(shù)值為1的數(shù)組np.ones(6,np.float)empty創(chuàng)建指定形狀的空數(shù)組,只分配內(nèi)存,不對其進(jìn)行初始化np.empty((2,3),)數(shù)組切片與檢索1.一維數(shù)組存取同字符串和列表對象一樣,可以通過下標(biāo)和切片的方式存取numpy數(shù)組。示例程序如下:2024/5/1112a=np.arange(10)a[5]#用整數(shù)作為下標(biāo)可以獲取數(shù)組中的某個元素,返回結(jié)果:5a[3:5] #用范圍作為下標(biāo)可以獲取數(shù)組的切片,包括a[3]但不包括a[5],左閉右開,返回結(jié)果:array([3,4])a[:5] #省略開始下標(biāo),表示從a[0]開始,返回結(jié)果:array([0,1,2,3,4])a[:-1] #下標(biāo)可以使用負(fù)數(shù),表示數(shù)組從后往前數(shù),返回結(jié)果:array([0,1,2,3,4,5,6,7,8])a[2:4]=100,101 #下標(biāo)可以用來修改元素的值a #返回結(jié)果:array([0,1,100,101,4,5,6,7,8,9])a[1:-1:2] #范圍中的第3個參數(shù)表示步長,2表示隔一個元素取一個元素,返回結(jié)果:array([1,101,5,7])a[::-1] #省略范圍的開始下標(biāo)和結(jié)束下標(biāo),步長為-1,整個數(shù)組頭尾顛倒,返回結(jié)果:array([9,8,7,6,5,4,101,100,1,0])a[5:1:-2] #步長為負(fù)數(shù)時,開始下標(biāo)須大于結(jié)束下標(biāo),返回結(jié)果:array([5,101])數(shù)組切片與檢索與Python的列表序列不同,通過下標(biāo)范圍獲取的新數(shù)組是原始數(shù)組的一個視圖,它與原始數(shù)組共享數(shù)據(jù)空間。示例程序如下:2024/5/1113b=a[3:7]

#通過下標(biāo)范圍產(chǎn)生一個新的數(shù)組b,b和a共享數(shù)據(jù)空間b #返回結(jié)果:array([101,4,5,6])b[2]=-10 #將b的第2個元素修改為-10b #返回結(jié)果:array([101,4,-10,6])a #a的第5個元素也被修改為10,返回結(jié)果:array([0,1,100,101,4,-10,6,7,8,9])數(shù)組切片與檢索除了使用下標(biāo)范圍存取元素之外,numpy還提供了兩種存取元素的高級方法。(1)使用整數(shù)序列。當(dāng)使用整數(shù)序列對數(shù)組元素進(jìn)行存取時,將使用整數(shù)序列中的每個元素作為下標(biāo),整數(shù)序列可以是列表或者數(shù)組。使用整數(shù)序列作為下標(biāo)獲得的數(shù)組不和原始數(shù)組共享數(shù)據(jù)空間。(2)使用布爾數(shù)組。當(dāng)使用布爾數(shù)組b作為下標(biāo)存取數(shù)組x中的元素時,將收集數(shù)組x中所有在數(shù)組b中對應(yīng)下標(biāo)為True的元素。使用布爾數(shù)組作為下標(biāo)獲得的數(shù)組不和原始數(shù)組共享數(shù)據(jù)空間。注意,這種方式只對應(yīng)于布爾數(shù)組,不能使用布爾列表。示例程序如下:2024/5/1114x=np.arange(10,1,-1)x

#返回結(jié)果:array([10,9,8,7,6,5,4,3,2])x[[3,3,1,8]]

#獲取x中下標(biāo)為3,3,1,8的4個元素,返回結(jié)果:array([7,7,9,2])b=x[np.array([3,3,-3,8])]

#下標(biāo)可以是負(fù)數(shù)b[2]=100b

#返回結(jié)果:array([7,7,100,2])x

#b和x不共享空間,因此x值并沒有改變,返回結(jié)果:array([10,9,8,7,6,5,4,3,2])x[[3,5,1]]=-1,-2,-3

#整數(shù)序列的下標(biāo)也可以用來修改元素的值x

#返回結(jié)果:array([10,-3,8,-1,6,-2,4,3,2])x=np.arange(5,0,-1)x

#返回結(jié)果:array([5,4,3,2,1])x[np.array([True,False,True,False,False])]

#布爾數(shù)組中下標(biāo)為0,2的元素為True,因此獲取x中下標(biāo)為0,2的元素,返回結(jié)果:array([5,3])x[[True,False,True,False,False]]

#如果是布爾列表,則把True當(dāng)作1,False當(dāng)作0,按照整數(shù)序列方式獲取x中的元素,返回結(jié)果:array([4,5,4,5,5])x[np.array([True,False,True,True,False])]=-1,-2,-3

#布爾數(shù)組也可以用來修改元素x

#返回結(jié)果:array([-1,4,-2,-3,1])數(shù)組切片與檢索2.多維數(shù)組存取多維數(shù)組的存取和一維數(shù)組類似,但多維數(shù)組有多個軸,因此它的下標(biāo)需要用多個值來表示,numpy采用元組作為數(shù)組的下標(biāo)。雖然在Python中經(jīng)常用圓括號將元組括起來,但其實元組的語法定義只需要用逗號隔開即可,例如,x,y=y,x就是用元組交換變量值的一個例子。如圖3-2所示,創(chuàng)建數(shù)組a=np.arange(0,60,10).reshape(-1,1)+np.arange(0,6),a為一個6×6的數(shù)組,圖中用描框的顏色深淺區(qū)分了各個下標(biāo)及其對應(yīng)的選擇區(qū)域。多維數(shù)組同樣也可以使用整數(shù)序列和布爾數(shù),如圖3-3所示。2024/5/1115數(shù)組切片與檢索●a[(0,1,2,3,4),(1,2,3,4,5)]:用于存取數(shù)組的下標(biāo)和有兩個元素的元組,元組中的每個元素都是整數(shù)序列,分別對應(yīng)數(shù)組的第0軸和第1軸。從兩個序列的對應(yīng)位置取出兩個整數(shù)組成下標(biāo):a[0,1],a[1,2],…,a[4,5]。●a[3:,[0,2,5]]:下標(biāo)中的第0軸是一個范圍,它選取第3行及之后所有行;第1軸是整數(shù)序列,它選取第0、2、5三列。●a[mask,2]:下標(biāo)的第0軸是一個布爾數(shù)組,它選取第0、2、5行;第1軸是一個整數(shù),選取第2列。2024/5/1116numpy數(shù)組運算(一)ufunc運算簡介為方便數(shù)組的批量運算,numpy內(nèi)置了許多通用的函數(shù)(ufunc),能對數(shù)組的每個元素進(jìn)行操作,這些ufunc函數(shù)都是用C語言實現(xiàn)的,因此它們的計算速度非???。例如:sinx計算之后,x中的值并沒有改變,而是新創(chuàng)建了一個數(shù)組保存結(jié)果。如果希望將sin函數(shù)計算的結(jié)果直接覆蓋到數(shù)組x上,可以將要被覆蓋的數(shù)組作為第2個參數(shù)傳遞給ufunc函數(shù)。通常情況下,numpy.sin對數(shù)組的計算速度要比math.sin函數(shù)快5~10倍,因為numpy.sin為了同時支持?jǐn)?shù)組和單個數(shù)值的計算,其C語言的內(nèi)部實現(xiàn)要比math.sin復(fù)雜得多。numpy.sin同樣也支持對單個數(shù)值求正弦,不過對單個數(shù)值的計算,math.sin要比numpy.sin快得多。2024/5/1117#對數(shù)組x中的每個元素進(jìn)行正弦計算,返回一個同樣大小的新數(shù)組>>>x=np.linspace(0,2*np.pi,10)>>>y=np.sin(x)>>>yarray([0.00000000e+00,6.42787610e-01,9.84807753e-01,8.66025404e-01,3.42020143e-01,-3.42020143e-01,-8.66025404e-01,-9.84807753e-01,-6.42787610e-01,-2.44921271e-16])>>>t=np.sin(x,x)>>>tarray([0.00000000e+00,6.42787610e-01,9.84807753e-01,8.66025404e-01,3.42020143e-01,-3.42020143e-01,-8.66025404e-01,-9.84807753e-01,-6.42787610e-01,-2.44921271e-16])>>>id(t)==id(x)Truenumpy數(shù)組運算numpy中有眾多的ufunc函數(shù),提供了各種各樣的計算,如四則運算、比較和布爾運算等。示例程序如下:2024/5/1118a=np.arange(0,4)a#返回結(jié)果:array([0,1,2,3])b=np.arange(1,5)b #返回結(jié)果:array([1,2,3,4])np.add(a,b) #返回結(jié)果:array([1,3,5,7])np.add(a,b,a) #第3個參數(shù)指定計算結(jié)果所要寫入的數(shù)組,如果指定的話,add函數(shù)就不再產(chǎn)生新的數(shù)組,返回結(jié)果:array([1,3,5,7])np.array([1,2,3])<np.array([3,2,1]) #返回結(jié)果:array([True,False,False])numpy數(shù)組運算1.四則運算由于Python的操作符重載功能,計算兩個數(shù)組相加可以簡單地寫為a+b,而np.add(a,b,a)則可以用a+=b來表示。下面是數(shù)組的運算符及其對應(yīng)的ufunc函數(shù)的一個列表,注意,除號“/”的意義根據(jù)是否激活__future__.division有所不同。(1)y=x1+x2:add(x1,x2[,y])。(2)y=x1-x2:subtract(x1,x2[,y])。(3)y=x1*x2:multiply(x1,x2[,y])。(4)y=x1/x2:divide(x1,x2[,y]),如果兩個數(shù)組的元素為整數(shù),那么用整數(shù)除法。(5)y=x1/x2:truedivide(x1,x2[,y]),總是返回精確的商。(6)y=x1//x2:floordivide(x1,x2[,y]),總是對返回值取整。(7)y=-x:negative(x[,y])。(8)y=x1**x2:power(x1,x2[,y])。(9)y=x1%x2:remainder(x1,x2[,y]),mod(x1,x2,[,y])。2024/5/1119numpy數(shù)組運算2.比較和布爾運算使用“==”“>”等比較運算符對兩個數(shù)組進(jìn)行比較,將返回一個布爾數(shù)組,它的每個元素值都是兩個數(shù)組對應(yīng)元素的比較結(jié)果,而且每個比較運算符也與一個ufunc函數(shù)對應(yīng)。示例程序如下:2024/5/1120np.array([1,2,3])<np.array([3,2,1])#返回結(jié)果:array([True,False,False],dtype=bool)y=x1==x2#equal(x1,x2[,y])y=x1!=x2 #not_equal(x1,x2[,y])y=x1<x2 #less(x1,x2,[,y])y=x1<=x2 #less_equal(x1,x2,[,y])y=x1>x2 #greater(x1,x2,[,y])y=x1>=x2 #greater_equal(x1,x2,[,y])numpy數(shù)組運算由于Python中的布爾運算使用and、or和not等關(guān)鍵字,它們無法被重載,因此數(shù)組的布爾運算只能通過相應(yīng)的ufunc函數(shù)進(jìn)行,這些函數(shù)名都以“l(fā)ogical_”開頭。另外,可以使用數(shù)組的any或all函數(shù),只要數(shù)組中有一個值為True,any就返回True;只有數(shù)組的全部元素都為True,all才返回True。示例程序如下:2024/5/1121a=np.arange(5)b=np.arange(4,-1,-1)a==b#返回結(jié)果:array([False,False,True,False,False],dtype=bool)a>b #返回結(jié)果:array([False,False,False,True,True],dtype=bool)np.logical_or(a==b,a>b)#與a>=b相同,返回結(jié)果:array([False,False,True,True,True],dtype=bool)np.any(a==b) #返回結(jié)果:Truenp.any(a==b)andnp.any(a>b) #返回結(jié)果:Truenumpy數(shù)組運算(二)廣播當(dāng)使用ufunc函數(shù)對兩個數(shù)組進(jìn)行計算時,ufunc函數(shù)會對這兩個數(shù)組的對應(yīng)元素進(jìn)行計算,因此它要求這兩個數(shù)組有相同的大小,即shape相同。如果兩個數(shù)組的大小不同,會進(jìn)行如下的廣播(broadcasting)處理:(1)讓所有輸入數(shù)組都向其中長度最長的數(shù)組看齊,長度不足的部分都通過在前面加1補(bǔ)齊。(2)輸出數(shù)組的長度是輸入數(shù)組長度在各個軸上的最大值。(3)如果輸入數(shù)組的某個軸和輸出數(shù)組的對應(yīng)軸的長度相同或者其長度為1,這個數(shù)組就能夠用來計算,否則出錯。(4)若輸入數(shù)組的某個軸的長度為1,則沿著此軸運算時都用此軸上的第一組值。2024/5/1122numpy數(shù)組運算例如:2024/5/1123>>>a=np.arange(0,60,10).reshape(-1,1)>>>aarray([[0],[10],[20],[30],[40],[50]])>>>a.shape(6,1)>>>b=np.arange(0,5)>>>barray([0,1,2,3,4])>>>b.shape(5,)>>>c=a+b

#計算a,b中所有元素組的和,得到一個shape為(6,5)的數(shù)組>>>carray([[0,1,2,3,4], [10,11,12,13,14], [20,21,22,23,24], [30,31,32,33,34], [40,41,42,43,44], [50,51,52,53,54]])>>>c.shape(6,5)numpy數(shù)組運算由于數(shù)組a和數(shù)組b的長度(即ndim屬性)不同,根據(jù)規(guī)則(1),需要讓數(shù)組b的長度向數(shù)組a看齊,于是在數(shù)組b的長度前面加1,補(bǔ)齊為(1,5)。相當(dāng)于做了如下計算:b.shape=(1,5)。這樣加法運算的兩個輸入數(shù)組的長度分別為(6,1)和(1,5),根據(jù)規(guī)則(2),輸出數(shù)組的各個軸的長度為輸入數(shù)組各個軸上長度的最大值,可知輸出數(shù)組的長度為(6,5)。由于數(shù)組b第0軸的長度為1,而數(shù)組a第0軸的長度為6,因此,為了讓它們在第0軸上能夠相加,需要將數(shù)組b第0軸的長度擴(kuò)展為6,這相當(dāng)于如下代碼:2024/5/1124>>>b=b.reshape(1,-1).repeat(6,axis=0)>>>barray([[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3,4]])numpy數(shù)組運算由于數(shù)組a第1軸的長度為1,而數(shù)組b第1軸的長度為5,因此,為了讓它們在第1軸上能夠相加,需要將數(shù)組a第1軸的長度擴(kuò)展為5,這相當(dāng)于如下代碼:經(jīng)過上述處理之后,數(shù)組a和數(shù)組b就可以按對應(yīng)元素進(jìn)行相加運算了。numpy在執(zhí)行a+b運算時,其內(nèi)部并不會真正將長度為1的軸用repeat函數(shù)進(jìn)行擴(kuò)展,因為這樣做太浪費空間了。由于這種廣播計算很常用,因此numpy提供了一種快速產(chǎn)生如上面a、b數(shù)組的方法:ogrid對象。示例程序如下:2024/5/1125>>>a=a.repeat(5,axis=1)>>>aarray([[0,0,0,0,0], [10,10,10,10,10], [20,20,20,20,20], [30,30,30,30,30], [40,40,40,40,40], [50,50,50,50,50]])>>>x,y=np.ogrid[0:5,0:5]>>>xarray([[0], [1], [2], [3], [4]])>>>yarray([[0,1,2,3,4]])numpy數(shù)組運算(三)ufunc其他方法ufunc函數(shù)本身還有一些方法,這些方法只對有兩個輸入、一個輸出的ufunc函數(shù)有效,其他ufunc對象調(diào)用這些方法時會拋出ValueError異常。reduce方法和Python的reduce函數(shù)類似,它會對參數(shù)序列中的元素進(jìn)行累積,沿著軸對數(shù)組進(jìn)行操作。accumulate方法和reduce方法類似,只是它返回的數(shù)組和輸入數(shù)組的長度相同,并保存所有的中間計算結(jié)果。示例程序如下:2024/5/1126>>>np.add.reduce([1,2,3])

#1+2+36>>>np.add.reduce([[1,2,3],[4,5,6]],axis=1) #(1+2+3),(4+5+6)array([6,15])>>>np.add.reduce([[1,2,3],[4,5,6]],axis=0)array([5,7,9])>>>np.add.accumulate([1,2,3])array([1,3,6])>>>np.add.accumulate([[1,2,3],[4,5,6]],axis=1)array([[1,3,6], [4,9,15]])numpy數(shù)組運算outer方法支持?jǐn)?shù)組乘法,規(guī)則是:(1)對于多維向量,全部展開成一維向量;(2)第1個參數(shù)表示倍數(shù),使得第2個向量每次變?yōu)閹妆?(3)第1個參數(shù)確定結(jié)果的行,第2個參數(shù)確定結(jié)果的列。示例程序如下:2024/5/1127>>>np.multiply.outer([1,2,3,4,5],[2,3,4])array([[2,3,4], [4,6,8], [6,9,12], [8,12,16], [10,15,20]])numpy數(shù)組拼接合并Python中,numpy數(shù)組的合并有很多方法,如append、concatenate、stack、hstack、vstack、dstack等,其中最廣泛使用的是append和concatenate。append可讀性好,比較靈活,但是占用內(nèi)存大。concatenate則不存在內(nèi)存占用大的問題。假設(shè)有兩個數(shù)組a,b,分別為a=np.arange(0,9).reshape(3,3)和b=2*a,下面給出各類操作示例。1.水平合并2024/5/1128>>>np.hstack((a,b))array([[0,1,2,0,2,4],[3,4,5,6,8,10],[6,7,8,12,14,16]])>>>np.concatenate((a,b),axis=1)array([[0,1,2,0,2,4],[3,4,5,6,8,10],[6,7,8,12,14,16]])numpy數(shù)組拼接合并2.垂直合并3.深度合并:沿著縱軸方向合并2024/5/1129>>>np.vstack((a,b))array([[0,1,2],[3,4,5],[6,7,8],[0,2,4],[6,8,10],[12,14,16]])>>>np.concatenate((a,b),axis=0)array([[0,1,2],[3,4,5],[6,7,8],[0,2,4],[6,8,10],[12,14,16]])>>>np.dstack((a,b))array([[[0,0], [1,2], [2,4]], [ [3,6], [4,8], [5,10]], [ [6,12], [7,14], [8,16]]])numpy數(shù)組拼接合并4.其他合并其他合并方法有:列合并column_stack,對于一維數(shù)組是按列方向合并,對于二維數(shù)組則同hstack一樣;行合并row_stack,對于一維數(shù)組是按行方向合并,對于二維數(shù)組則與vstack一樣;另外,還有extend方法、直接相加“+”、flatten方法等。2024/5/1130numpy矩陣運算numpy與Matlab軟件不同,對于多維數(shù)組的運算,缺省情況下并不使用矩陣運算,如果希望對數(shù)組進(jìn)行矩陣運算,可以調(diào)用相應(yīng)的函數(shù)。numpy庫提供了matrix類,使用matrix類可創(chuàng)建矩陣對象,它們的加、減、乘、除運算缺省,采用矩陣方式計算,因此用法和Matlab十分類似。但是由于numpy中同時存在ndarray和matrix對象,用戶很容易將兩者混淆,這有違Python的“顯式優(yōu)于隱式”的原則,因此并不推薦在較復(fù)雜的程序中使用matrix。下面的代碼是使用matrix的一個示例。a是用matrix創(chuàng)建的矩陣對象,因此乘法和冪運算符都變成了矩陣運算。計算矩陣a和其逆矩陣的乘積,結(jié)果是一個單位矩陣。2024/5/1131>>>a=np.matrix([[1,2,3],[5,5,6],[7,9,9]])>>>a*a**-1matrix([[1.00000000e+00,1.66533454e-16,-1.11022302e-16],[0.00000000e+00,1.00000000e+00,-4.44089210e-16],[4.44089210e-16,5.55111512e-17,1.00000000e+00]])numpy矩陣運算矩陣的乘積可以使用dot函數(shù)進(jìn)行計算。對于二維數(shù)組,它計算的是矩陣乘積;對于一維數(shù)組,它計算的是其點積。當(dāng)需要將一維數(shù)組當(dāng)作列矢量或者行矢量進(jìn)行矩陣運算時,推薦先使用reshape函數(shù)將一維數(shù)組轉(zhuǎn)換為二維數(shù)組。示例程序如下:2024/5/1132>>>a=np.array([1,2,3])>>>a.reshape((-1,1))array([[1], [2], [3]])>>>a.reshape((1,-1))array([[1,2,3]])numpy矩陣運算除了使用dot函數(shù)計算乘積之外,numpy還提供了inner和outer等多種計算乘積的函數(shù)。這些函數(shù)計算乘積的方式不同,尤其是對于多維數(shù)組,更容易混淆。(1)dot函數(shù)。對于兩個一維數(shù)組,計算的是這兩個數(shù)組對應(yīng)下標(biāo)元素的乘積和(數(shù)學(xué)上稱為內(nèi)積);對于兩個二維數(shù)組,計算的是兩個數(shù)組的矩陣乘積;對于兩個多維數(shù)組,結(jié)果數(shù)組中的每個元素都是數(shù)組a的最后一維上的所有元素與數(shù)組b的倒數(shù)第二維上的所有元素的乘積和。通用計算公式如下:dot(a,b)[i,j,k,m]=sum(a[i,j,:]*b[k,:,m])(2)inner函數(shù)。和dot函數(shù)一樣,對于兩個一維數(shù)組,計算的是這兩個數(shù)組對應(yīng)下標(biāo)元素的乘積和;對于兩個多維數(shù)組,結(jié)果數(shù)組中的每個元素都是數(shù)組a和b的最后一維上元素的內(nèi)積,因此數(shù)組a和b的最后一維的長度必須相等。通用計算公式如下:inner(a,b)[i,j,k,m]=sum(a[i,j,:]*b[k,m,:])(3)outer函數(shù)。只按照一維數(shù)組進(jìn)行計算,如果傳入的參數(shù)是多維數(shù)組,則先將此數(shù)組展平為一維數(shù)組,之后再進(jìn)行運算。outer函數(shù)計算的是列向量和行向量的矩陣乘積。矩陣中一些更高級的運算可以在numpy的線性代數(shù)子庫linalg中找到。例如,inv函數(shù)計算逆矩陣,solve函數(shù)求解多元一次方程組。2024/5/1133pandas基礎(chǔ)2024/5/1134為什么選擇pandaspandas是基于numpy的一種工具,該工具是為解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。pandas納入了大量庫和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所需的工具、函數(shù)和方法,是使Python成為強(qiáng)大而高效的數(shù)據(jù)分析環(huán)境的重要因素之一。pandas是Python的一個數(shù)據(jù)分析包,最初由AQRCapitalManagement于2008年4月開發(fā),并于2009年底開源。pandas最初被作為金融數(shù)據(jù)分析工具開發(fā)出來,因此,pandas為時間序列分析提供了很好的支持。pandas的名稱來自面板數(shù)據(jù)(paneldata)和Python數(shù)據(jù)分析(dataanalysis)。paneldata是經(jīng)濟(jì)學(xué)中關(guān)于多維數(shù)據(jù)集的一個術(shù)語,pandas中也提供了panel這一數(shù)據(jù)類型。2024/5/1135pandas的數(shù)據(jù)結(jié)構(gòu)pandas提供的數(shù)據(jù)結(jié)構(gòu)包括:●Series:一維數(shù)組,與numpy中的一維array類似。二者與Python基本的數(shù)據(jù)結(jié)構(gòu)list也很相近。Series能保存不同數(shù)據(jù)類型的數(shù)據(jù),字符串、布爾值、數(shù)字等都能保存在Series中。●Time-Series:以時間為索引的Series?!馜ataFrame:二維表格型數(shù)據(jù)結(jié)構(gòu)。很多功能與R語言中的data.frame類似??梢詫ataFrame理解為Series的容器。●panel:三維數(shù)組,可以理解為DataFrame的容器?!馪anel4D:像Panel一樣的四維數(shù)據(jù)容器。●PanelND:擁有factory集合,可以創(chuàng)建像Panel4D一樣的N維數(shù)據(jù)容器的模塊。(1)Series。Series(系列)是一維標(biāo)記數(shù)組,可以存儲任意數(shù)據(jù)類型,如整型、字符串、浮點型和Python對象等,軸標(biāo)一般指索引。Series與numpy一維array及l(fā)ist比較:list中的元素可以是不同的數(shù)據(jù)類型,而array和Series中只允許存儲相同的數(shù)據(jù)類型,這樣可以更有效地使用內(nèi)存,提高運算效率。2024/5/1136pandas的數(shù)據(jù)結(jié)構(gòu)(2)DataFrame。DataFrame(數(shù)據(jù)框)是二維表格型數(shù)據(jù)結(jié)構(gòu),列可以是不同的數(shù)據(jù)類型。它是最常用的pandas對象,像Series一樣可以接收多種輸入:list、dict、Series和DataFrame等。初始化對象時,除了數(shù)據(jù),還可以傳入index和columns這兩個參數(shù)。(3)panel。panel很少使用,但它是很重要的三維數(shù)據(jù)容器。paneldata源于經(jīng)濟(jì)學(xué),也是pan(el)-da(ta)-s的來源。安裝方式:pipinstallpanel。約定俗成的導(dǎo)入慣例如下所示:2024/5/1137frompandasimportSeries,DataFrameimportpandasaspdSeries相關(guān)操作1.創(chuàng)建Series通過傳遞一個list對象來創(chuàng)建Series,默認(rèn)創(chuàng)建整型索引。如創(chuàng)建一個用索引來確定每個數(shù)據(jù)點的Series:如果有數(shù)據(jù)在一個Python字典中,可以通過傳遞字典來創(chuàng)建一個Series,例如:2.存取元素Series對象可以通過索引標(biāo)簽或者整數(shù)下標(biāo)的標(biāo)量或序列檢索元素,還可以通過布爾數(shù)組過濾、純量乘法或使用數(shù)學(xué)函數(shù)來進(jìn)行檢索和計算。2024/5/1138obj1=pd.Series([6,7,-5,3],index=[d,b,a,c])sdata={北京:2188,上海:2489,深圳:1768,杭州:1237,廈門:800}obj2=pd.Series(sdata)Series相關(guān)操作示例程序如下:2024/5/1139In[51]:obj1=pd.Series([4,7,-5,3],index=[d,b,a,c])In[52]:obj1Out[52]:d4b7a-5c3dtype:int64In[53]:obj1[d]=6...:obj1[[c,a,d]]Out [53]:c3a-5d6dtype:int64In [54]:obj1[a]Out [54]:-5In [55]:print(obj1[obj2>0])...:print(obj1*2)d6b7c3dtype:int64d12b14a-10c6dtype:int64In [56]:obj1[0]Out [56]:6Series相關(guān)操作3.運算與對齊Series的一個重要功能是,在算術(shù)運算中,它會自動對齊不同索引的數(shù)據(jù),即行或列中標(biāo)簽一致的對應(yīng)元素進(jìn)行運算,沒有對應(yīng)的則為NaN。示例程序如下:2024/5/1140In[11]:sdata={北京:2188,上海:2489,深圳:1768,杭州:1237,廈門:800}...:obj2=pd.Series(sdata)In [12]:省=[北京,上海,深圳,杭州]...:obj3=pd.Series(sdata,index=省)...:obj3Out [12]:北京2188上海2489深圳1768杭州1237dtype:int64In[13]:obj2+obj3Out[13]:上海4978.0北京4376.0廈門NaN杭州2474.0深圳3536.0dtype:float64Series相關(guān)操作4.修改與檢測在pandas中,用函數(shù)isnull和notnull來檢測數(shù)據(jù)是否丟失,如pd.isnull(obj4),pd.notnull(obj4)。Series也提供了這些函數(shù)的實例方法,如obj4.isnull()。從坐標(biāo)軸刪除條目,drop函數(shù)將會返回一個新的對象并從坐標(biāo)軸中刪除指定的一個或多個值,如果設(shè)置參數(shù)“inplace=True”,則修改對象本身,沒有返回值。示例程序如下:2024/5/1141In[14]:obj=pd.Series(np.arange(5.),index=[a,b,c,d,e])...:print(obj)a0.0b1.0c2.0d3.0e4.0dtype:float64In[15]:new_obj=obj.drop(c)...:print(new_obj)...:obj.drop([d,c])a0.0b1.0d3.0e4.0dtype:float64Out[15]:a0.0b1.0e4.0dtype:float64Series相關(guān)操作Series對象本身和它的索引都有一個name屬性,它和pandas的其他一些關(guān)鍵功能整合在一起,Series對象及其索引可以通過name屬性命名。示例程序如下:5.其他方法Series對象還自帶了其他方法,可以進(jìn)行數(shù)值統(tǒng)計、字符串處理等,如value_counts、str.lower等函數(shù)。2024/5/1142In[16]:=人口...:=省份...:obj4Out [16]:省份北京2188上海2489深圳1768杭州1237Name:人口,dtype:int64DataFrame相關(guān)操作創(chuàng)建DataFrame的方法有多種,如:(1)通過傳遞一個numpyarray、時間索引以及列標(biāo)簽來創(chuàng)建一個DataFrame。(2)通過使用一個相等長度列表的字典來創(chuàng)建一個DataFrame:●它的索引會自動分配,并且對列進(jìn)行了排序?!袢绻O(shè)定了一個列的順序,DataFrame的列將會精確地按照所傳遞的順序排列。通過一個嵌套的字典格式創(chuàng)建DataFrame,外部鍵會被解釋為列索引,內(nèi)部鍵會被解釋為行索引,內(nèi)部字典的鍵被結(jié)合并排序以形成結(jié)果的索引。示例程序如下:2024/5/1143:{2000:1.5,2001:1.7,2002:3.6}}In[21]:frame1=pd.DataFrame(pop)...:frame1Out[21]:

深圳上海2001

2.4

1.72002

2.9

3.62000

NaN

1.5DataFrame相關(guān)操作2.DataFrame檢索DataFrame中的一列可以通過字典記法或?qū)傩詠頇z索,返回的Series里包含和DataFrame相同的索引。示例程序如下:2024/5/1144In[21]:data={省份:[北京,上海,上海,深圳,深圳,深圳],...:year:[2000,2001,2002,2001,2002,2003],...:pop:[1.5,1.7,3.6,2.4,2.9,3.2]}In[22]:frame2=pd.DataFrame(data,columns=[year,省份,pop,debt],index=[one,two,three,four,five,six])...:print(frame2)...:frame2.columnsyear省份popdebtone 2000 北京 1.5 NaNtwo 2001 上海 1.7 NaNthree 2002 上海 3.6 NaNfour 2001 深圳 2.4 NaNfive 2002 深圳 2.9 NaNsix 2003 深圳 3.2 NaNOut[22]:Index([year,省份,pop,debt],dtype=object)In[23]:print(frame2[省份])...:frame2.yearone北京two 上海three 上海four 深圳five 深圳six 深圳Name:省份,dtype:objectOut[23]:one2000two 2001three 2002four 2001five 2002six 2003Name:year,dtype:int64DataFrame相關(guān)操作使用loc和iloc方法(嚴(yán)格來講是DataFrame對象屬性),分別按照標(biāo)簽名稱和索引編號檢索元素。注意:Python2.x中的ix索引方式將逐漸在Python3.x版本中移除?!駆oc方法檢索格式:loc[索引標(biāo)簽名稱序列,列標(biāo)簽名稱序列],使用的不是圓括號,不像函數(shù),而類似數(shù)組的使用方式。如frame2.loc[three]?!駃loc方法檢索格式:[索引編號序列,列編號序列]?!馜ataFrame對象還支持布爾序列檢索方式,如data[data[three]>5]。示例程序如下:2024/5/1145In[24]:data=pd.DataFrame(np.arange(16).reshape((4,4)),...: index=[北京,上海,武漢,杭州],...: columns=[one,two,three,four])...:print(data)...:data[two]...:data[[three,one]]onetwothreefour北京 0 1 2 3上海 4 5 6 37武漢 8 9 10 11杭州 12 13 14 15Out[24]:threeone北京 2 0上海 6 4武漢 10 8杭州 14 12DataFrame相關(guān)操作2024/5/1146In[25]:print(data[:2])...:data[data[three]>5]onetwothreefour北京 0 1 2 3上海 4 56 37 Out[25]:onetwothreefour上海 4 5 6 7武漢 8 9 10 11杭州 12 13 14 15In[26]:data.loc[北京,[two,three]]Out[26]:two1three2Name:北京,dtype:int32In[27]:data.iloc[2,[3,0,1]]Out[27]:four11one8two9Name:武漢,dtype:int32DataFrame相關(guān)操作3.DataFrame賦值DataFrame的列可以通過賦值來修改,索引對象不能修改。例如,空的“debt”列可以通過一個純量或一個數(shù)組來賦值;但通過列表或數(shù)組給一列賦值時,所賦的值的長度必須和DataFrame的長度相匹配。使用Series賦值時,它會代替在DataFrame中精確匹配的索引的值,并在所有的空洞插入丟失數(shù)據(jù)NaN;給一個不存在的列賦值時,將會創(chuàng)建一個新的列。4.算術(shù)運算pandas最重要的特性之一是在具有不同索引的對象間進(jìn)行算術(shù)運算。當(dāng)把對象相加時,如果有任何索引對不相同,則在結(jié)果中將會把各自的索引聯(lián)合起來。示例程序如下:2024/5/1147df1=pd.DataFrame(np.arange(12.).reshape((3,4)),columns=list(abcd))df2=pd.DataFrame(np.arange(20.).reshape((4,5)),columns=list(abcde))df2.loc[1,b]=np.nanprint(df1)df2df1+df2DataFrame相關(guān)操作運行結(jié)果如下:

在不同索引對象間進(jìn)行算術(shù)運算時,若一個軸標(biāo)簽在另一個對象中找不到,可以填充一個特定的值,如0。示例程序如下:2024/5/1148df1df2df1+df2

df1.reindex(columns=df2.columns,fill_value=0)df1DataFrame相關(guān)操作5.刪除對于DataFrame對象,可以從任何坐標(biāo)軸刪除索引值,也可以像字典一樣,使用“del+關(guān)鍵字”刪除列。對應(yīng)的drop函數(shù),缺省刪除對應(yīng)行,即索引標(biāo)簽axis=0;指定axis=1或axis=columns,表示刪除整列;drop函數(shù)返回刪除后的結(jié)果,缺省則不對原對象進(jìn)行修改,參數(shù)inplace用于指定是否修改原對象。示例程序如下:2024/5/1149In[29]:data.drop([北京,上海],inplace=True)In[30]:dataOut[30]:onetwothreefour武漢891011杭州12131415In[31]:data.drop(two,axis=1)...:data.drop([four],axis=columns)Out[31]:onetwothree武漢8910杭州121314In[32]:dataOut[32]:onetwothreefour武漢891011杭州12131415In[34]:frame2[eastern]=frame2.省份==上海...:frame2Out[34]:year省份popdebteasternone 2000 北京 1.5 NaN Falsetwo 2001 上海 1.7 NaN Truethree 2002 上海 3.6 NaN Truefour 2001 深圳 2.4 NaN Falsefive 2002 深圳 2.9 NaN Falsesix 2003 深圳 3.2 NaN FalseIn[35]:delframe2[eastern]...:frame2.columnsOut[35]:Index([year,省份,pop,debt],dtype=object)DataFrame相關(guān)操作6.DataFrame和Series之間的運算DataFrame和Series間的運算操作與numpy的數(shù)組運算廣播機(jī)制類似。如果一個索引值在DataFrame的列和Series的索引里都找不到,則對象將會從它們的聯(lián)合里重建索引。示例程序如下:2024/5/1150In[36]:frame=pd.DataFrame(np.arange(12.).reshape((4,3)),...: columns=list(bde), ...: index=[昆明,蘭州,長沙,桂林]) ...:series=frame.iloc[0] ...:print(frame) ...:print(series)bde昆明0.01.02.0蘭州3.04.05.0長沙6.07.08.0桂林9.010.011.0b0.0d1.0e2.0Name:昆明,dtype:float64In[37]:frame-seriesOut[37]:bde昆明0.00.00.0蘭州3.03.03.0長沙6.06.06.0桂林9.09.09.0pandas索引對象1.索引簡介pandas的索引對象用來保存坐標(biāo)軸標(biāo)簽和其他元數(shù)據(jù)(如坐標(biāo)軸名稱)。構(gòu)建Series或DataFrame時,任何數(shù)組或其他序列的標(biāo)簽都在內(nèi)部轉(zhuǎn)化為索引。pandas中的主要索引對象包括:●Index:最通用的索引對象,使用Python對象的numpy數(shù)組來表示坐標(biāo)軸標(biāo)簽?!馡nt64Index:對整型值的特化索引?!馦ultiIndex:“分層”索引對象,表示單個軸的多層次索引,可以認(rèn)為是類似元組的數(shù)組?!馜atetimeIndex:存儲納秒時間戳。使用numpy的Datetime64數(shù)據(jù)類型表示?!馪eriodIndex:對周期(時間間隔的)數(shù)據(jù)的特化索引?!馬angeIndex:區(qū)間索引,屬于Index的子類,作用是為數(shù)據(jù)選擇器提供一個數(shù)字索引,主要用于行索引。下面的代碼是RangeIndex索引對象的示例:2024/5/1151In[38]:obj=pd.Series([4,7,-5,3])...:objOut[38]:04172-533dtype:int64In[39]:print(obj.values)...:print(obj.index)#返回RangeIndex對象,類似range(4)[47-53

溫馨提示

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

評論

0/150

提交評論