《統(tǒng)計分析軟件:使用R與Python》 課件 第10章Python 數(shù)據(jù)處理_第1頁
《統(tǒng)計分析軟件:使用R與Python》 課件 第10章Python 數(shù)據(jù)處理_第2頁
《統(tǒng)計分析軟件:使用R與Python》 課件 第10章Python 數(shù)據(jù)處理_第3頁
《統(tǒng)計分析軟件:使用R與Python》 課件 第10章Python 數(shù)據(jù)處理_第4頁
《統(tǒng)計分析軟件:使用R與Python》 課件 第10章Python 數(shù)據(jù)處理_第5頁
已閱讀5頁,還剩81頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

10.1數(shù)據(jù)文件的讀寫操作10.2NumPy和Pandas簡介10.3Matplotlib簡介第10章Python數(shù)據(jù)處理Python數(shù)據(jù)處理NumPy和Pandas簡介ndarrayNumpy軸ufunc函數(shù)Series和DataFrame等Pandas數(shù)據(jù)結(jié)構(gòu)Pandas數(shù)據(jù)結(jié)構(gòu)提取、添加和刪除數(shù)據(jù)

Matplotlib簡介快速繪圖數(shù)據(jù)文件的讀寫操作文件打開關(guān)閉open、close函數(shù)讀取read類函數(shù)

寫入類write類函數(shù)csv文件的讀寫函數(shù)數(shù)據(jù)的讀取對文件數(shù)據(jù)的讀取是用的read()

方法,read()

方法將返回文件中的所有內(nèi)容用print打印所有內(nèi)容會顯示Hello,world!

,記得每次用完文件后,都要關(guān)閉文件f.close()。#設(shè)定當(dāng)前工作目錄importosos.chdir("E://Courses//基礎(chǔ)課程//統(tǒng)計分析軟件")f=open("helloworld.txt",'r')mydat=f.read()print(mydat)f.close()10.1數(shù)據(jù)文件的讀取操作數(shù)據(jù)的讀取也可以使用withopen()asf:

在操作后自動關(guān)閉文件withopen('helloworld.txt')asf:content=f.read()print(content)數(shù)據(jù)的讀取在read()

中加入數(shù)字,可指定讀取的字符數(shù)withopen('helloworld.txt')asf:content=f.read(5)print(content)數(shù)據(jù)的寫入寫入的操作和讀取是類似的,不過用的是write()

函數(shù),同時需要將打開文件的mode

參數(shù)設(shè)置為w

f=open("ssoft.txt",'w')f.write("統(tǒng)計分析軟件快結(jié)束了,堅持一下!")f.close()文本文件的讀取f=open(“GZdata.csv",'r')content=f.readlines()#一次性讀取完所有數(shù)據(jù)f.close()print(content[0])#第一行數(shù)據(jù)print(content[1])#第二行數(shù)據(jù)通過open()

函數(shù)打開文件,返回文件對象對文件對象進(jìn)行讀取操作,除了前面介紹的read()

之外還有兩種讀取數(shù)據(jù)的方法:readline()

是每次讀入一條數(shù)據(jù)的方式,readlines()

是一次性讀入文件所有數(shù)據(jù)##id,name,sex,birth,title,height,weight,salary####2021A001,王天賜,男,1972/4/8,教授,165,66,30.1文本文件的讀取

readlines()

讀取后得到的是每行數(shù)據(jù)組成的列表,但是一行樣本數(shù)據(jù)全部存儲為一個字符串,并且數(shù)據(jù)讀入后并沒有將換行符去掉(“\r\n”或“\n”)在讀入數(shù)據(jù)之后,用for循環(huán)對每一個元素去除換行符,并將每一個變量值用字符串處理方法.split()

分隔開來

.strip()

本身是一個對字符串指定字符去除的方法,但括號里參數(shù)為空的時候,就會去除\r\n\t

文本文件的讀取content_new=[]#新建一個列表用于保存數(shù)據(jù)forconincontent:temp=con.strip()#去除換行符temp=temp.split(“,”)#用’,’號進(jìn)行列表分割content_new.append(temp)#加入到新列表尾部print(content_new[0])print(content_new[1])##['id','name','sex','birth','title','height','weight','salary']##['2021A001','王天賜','男','1972/4/8','教授','165','66','30.1']文本文件的寫入設(shè)置參數(shù)mode=‘w’,

write()、writelines()

是兩個對文件對象的寫入數(shù)據(jù)的方法。write()是逐次寫入,writelines()可對一個列表里的所有數(shù)據(jù)一次性寫入文件中如果有換行需要,則要在每條數(shù)據(jù)后增加換行符,同時用字符串.join()

的方法將每個變量數(shù)據(jù)聯(lián)合成一個字符串并增加間隔符’,’。f=open("GZnew.txt",'w')#寫入的兩行新數(shù)據(jù)newcon=[['id','name','sex','birth','title','height','weight','salary'],['2021A040','趙匡胤','女','1992/4/8','講師','164','66','10.1']]forconinnewcon:con=','.join(con)#用join將每個列表中元素用‘,'連接con=con+'\n'#加換行符f.write(con)f.close()CSV(逗號分隔值)文件的讀取importcsvf=open("GZdata.csv",'r')reader=csv.reader(f)#用csv.reader()方法生成reader對象content_new=[]forconinreader:content_new.append(con)print(content_new[0])print(content_new[1])f.close()CSV文件還可以直接利用Python內(nèi)置的

csv

模塊讀取數(shù)據(jù)##['id','name','sex','birth','title','height','weight','salary']##['2021A001','王天賜','男','1972/4/8','教授','165','66','30.1']CSV文件的寫入引入csv模塊

open()

打開文件,使用csv.writer()

作為寫入器,

writerow()方法逐行寫入f=open("GZnew.txt",'w')writer=csv.writer(f)#生成writer對象#寫入的兩行新數(shù)據(jù)newcon=[['id','name','sex','birth','title','height','weight','salary'],['2021A040','趙匡胤','女','1992/4/8','講師','164','66','10.1']]forconinnewcon:writer.writerow(con)f.close()統(tǒng)計及數(shù)據(jù)分析常見軟件包NumPySciPyPandasSciKit-Learn作圖及可視化包matplotlibSeaborn10.2NumPy和Pandas簡介NumPyNumPy是Python科學(xué)計算基礎(chǔ)軟件包。提供多維數(shù)組對象,多種派生對象(如:掩碼數(shù)組、矩陣)以及用于快速操作數(shù)組的函數(shù)及API,它包括數(shù)學(xué)、邏輯、傅立葉變換、線性代數(shù)、統(tǒng)計運算、隨機(jī)模擬等。

NumPy包的核心是ndarray對象,(目標(biāo)是)比傳統(tǒng)Python列表快50倍的數(shù)組NumPy的源代碼:

/numpy/numpyAnaconda里面已經(jīng)安裝過NumPy。原生的Python安裝:·在cmd中輸入pipinstallnumpy·在官網(wǎng)中下載相關(guān)版本安裝/pypi/numpy安裝之后,我們用導(dǎo)入這個庫>importnumpyasnp>np.__version__'1.21.5'并且查看版本:NumPy的安裝NumPyNumPy數(shù)組和原生PythonArray(數(shù)組)之間有幾個重要的區(qū)別:NumPy數(shù)組在創(chuàng)建時具有固定的大小,與Python的原生數(shù)組對象(可以動態(tài)增長)不同。更改ndarray的大小將創(chuàng)建一個新數(shù)組并刪除原來的數(shù)組。NumPy數(shù)組中的元素都需要具有相同的數(shù)據(jù)類型,因此在內(nèi)存中的大小相同。NumPy數(shù)組有助于對大量數(shù)據(jù)進(jìn)行高級數(shù)學(xué)和其他類型的操作。通常,這些操作的執(zhí)行效率更高,比使用Python原生數(shù)組的代碼更少。ndarray的創(chuàng)建

NumPy中的核心對象是ndarray。ndarray可以看成數(shù)組,類似于R語言的向量或者矩陣。NumPy里面所有的函數(shù)都是圍繞ndarray展開的。>a=np.array([1,2,3,4])>b=np.array((5,6,7,8))>c=np.array([[1,2,3,4],[5,6,7,8],[7,8,9,10]])bc------------------------------[5,6,7,8][[1,2,3,4],

[5,6,7,8],

[7,8,9,10]]ndarray對維數(shù)沒有限制。[]從內(nèi)到外分別為第0軸,第1軸,第2軸…c第0軸長度為3,第1軸長度為4。numpy的軸importnumpyasnpa=np.array([[1,2,3], [4,5,6]])a.sum()a.sum(axis=0)a.sum(axis=1)NumPy中許多函數(shù)和命令把軸作為參數(shù)。在二維數(shù)組中axis=0是按列的,axis=1意味著按行。NumPy中許多函數(shù)和命令把軸作為參數(shù)。思考題table=np.array([[5,3,7,1], [2,6,7,9], [4,3,2,0]])table.max()table.max(axis=0)table.max(axis=1)##9##array([5,6,7,9])##array([7,9,4])運行結(jié)果?NumPy提供了專門用于生成ndarray的函數(shù),提高創(chuàng)建ndarray的速度。>a=np.arange(0,1,0.1)array([0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9])>b=np.linspace(0,1,10)array([0.,0.11111111,0.22222222,0.33333333,0.44444444,0.55555556,0.66666667,0.77777778,0.88888889,1.])>c=np.linspace(0,1,10,endpoint=False)array([0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9])>d=np.logspace(0,2,5)array([1.,3.16227766,10.,31.6227766,100.])ndarray的創(chuàng)建

np.empty((2,3),)創(chuàng)建2*3的整形型空矩陣,只分配內(nèi)存np.zeros(4,)創(chuàng)建長度為4,值為全部為0的數(shù)組np.full(4,np.pi)創(chuàng)建長度為4,值為全部為pi的數(shù)組ndarray的創(chuàng)建

ndarray的元素具有相同的元素類型。常用的有int(整型),float(浮點型),complex(復(fù)數(shù)型)。>a=np.array([1,2,3,4],dtype=float)array([1.,2.,3.,4.])>a.dtypedtype('float64')ndarray的shape屬性用來獲得它的形狀,也可以自己指定。>c=np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])>c.shape(3,4)>a=np.array([1,2,3,4])>d=a.reshape((2,2))array([[1,2],[3,4]])ndarray的屬性ndarray的切片和list是一樣的。>a=np.arange(10)>aarray([0,1,2,3,4,5,6,7,8,9])a[5]a[3:5]a[:5]a[:-1]----------------------------------------------------5[3,4][0,1,2,3,4][0,1,2,3,4,5,6,7,8]a[1:-1:2]a[::-1]a[5:1:-2]---------------------------------------------------[1,3,5,7][9,8,7,6,5,4,3,2,1,0][5,3]可以通過切片的對ndarray中的元素進(jìn)行更改。>a[2:4]=100,101>aarray([0,1,100,101,4,5,6,7,8,9])ndarray的切片ndarray通過切片產(chǎn)生一個新的viewb,b和a共享同一塊數(shù)據(jù)存儲空間。。>b=a[3:7]>b[2]=-10ba----------------------------------------------------------------------[101,4,-10,6][0,1,100,101,4,-10,6,7,8,9]如果想改變這種情況,我們可以用列表對數(shù)組元素切片。>b=a[[3,3,-3,8]]>barray([101,101,7,8])>b[2]=1000ba----------------------------------------------------------------------([101,101,1000,8])([0,1,100,101,4,-10,6,7,8,9])ndarray的切片在Numpy中當(dāng)數(shù)組進(jìn)行運算時,如果兩個數(shù)組的shape相同,數(shù)組相加就是兩個數(shù)組的對應(yīng)位相加。當(dāng)數(shù)組的shape不同但滿足某些條件時,則可利用NumPy的廣播進(jìn)行計算(較小的數(shù)組在較大的數(shù)組上“廣播”,以便它們具有兼容的shape)。例:數(shù)組和標(biāo)量值組合:ndarray的廣播>>>a=np.array([1.0,2.0,3.0])>>>b=2.0>>>a*barray([2.,4.,6.])兩個一維數(shù)組組合:np.arange(0,40,10).reshape(-1,1)+np.arange(1,4)[[123][111213][212223][313233]]ufunc是universalfunction的簡稱,它是一種能對數(shù)組每個元素進(jìn)行運算的函數(shù)。NumPy的許多ufunc函數(shù)都是用C語言實現(xiàn)的,因此它們的運算速度非???。>x=np.linspace(0,2*np.pi,10)>y=np.sin(x)>yarray([0.00000000e+00,6.42787610e-01,9.84807753e-01,.....,-2.44929360e-16])值得注意的是,對于同等長度的ndarray,np.sin()比math.sin()快。但是對于單個數(shù)值,math.sin()的速度則更快。ufunc函數(shù)NumPy提供了許多ufunc函數(shù),它們和相應(yīng)的運算符運算結(jié)果相同。>a=np.arange(0,4)>b=np.arange(1,5)>np.add(a,b)array([1,3,5,7])>a+barray([1,3,5,7])>np.subtract(a,b)#減法>np.multiply(a,b)#乘法>np.divide(a,b)#如果兩個數(shù)字都為整數(shù),則為整數(shù)除法>np.power(a,b)#乘方ufunc函數(shù)-四則運算使用==,>對兩個數(shù)組進(jìn)行比較,會返回一個布爾數(shù)組,每一個元素都是對應(yīng)元素的比較結(jié)果。>np.array([1,2,3])<np.array([3,2,1])array([True,False,False],dtype=bool)布爾運算在NumPy中也有對應(yīng)的ufunc函數(shù)。表達(dá)式ufunc函數(shù)y=x1==x2equal(x1,x2[,y])y=x1!=x2not_equal(x1,x2[,y])y=x1<x2less(x1,x2[,y])y=x1<=x2not_equak(x1,x2[,y])y=x1>x2greater(x1,x2[,y])y=x1>=x2gerater_equal(x1,x2[,y])ufunc函數(shù)-比較運算除了前面介紹的ufunc()函數(shù)之外,NumPy還提供了大量對于數(shù)組運算的函數(shù)。它們能夠簡化邏輯,提高運算速度。我們首先看隨機(jī)數(shù)。NumPy產(chǎn)生隨機(jī)數(shù)的模塊在random里面,其中有大量的分布。>fromnumpyimportrandomasnr>np.set_printoptions(precision=2)#顯示小數(shù)點后兩位數(shù)>r1=nr.rand(4,3)[[0.87,0.42,0.34],[0.25,0.87,0.42],[0.49,0.18,0.44],[0.53,0.23,0.81]]>r2=nr.poisson(2.0,(4,3))[[3,1,5],[2,2,3],[2,4,4],[2,2,3]]ufunc函數(shù)-隨機(jī)數(shù)生成rand0到1之間的隨機(jī)數(shù)normal正太分布的隨機(jī)數(shù)randint制定范圍內(nèi)的隨機(jī)整數(shù)uniform均勻分布randn標(biāo)準(zhǔn)正太的隨機(jī)數(shù)poisson泊松分布choice隨機(jī)抽取樣本shuffle隨機(jī)打亂順序ufunc函數(shù)-隨機(jī)數(shù)生成NumPy在均值等方面常用的統(tǒng)計函數(shù)如下:>np.random.seed(42)>a=np.random.randint(0,10,size=(4,5))>np.sum(a)96函數(shù)名功能sum求和average加權(quán)平均數(shù)var方差mean期望std標(biāo)準(zhǔn)差product連乘積ufunc函數(shù)-統(tǒng)計函數(shù)其他統(tǒng)計函數(shù)有:unique(),bicount(),histogram()。>np.random.seed(42)>a=np.random.randint(0,8,10)>np.unique(a)anp.unique(a)------------------------------------------------[6,3,4,6,2,7,4,4,6,1][1,2,3,4,6,7]unique有兩個參數(shù),return_index=True同時返回原始數(shù)組中的下標(biāo),return_inverse=True表示原始數(shù)據(jù)在新數(shù)組的下標(biāo)。>x,index=np.unique(a,return_index=True)xindexa[index]------------------------------------------------------[1,2,3,4,6,7][9,4,1,2,0,5][1,2,3,4,6,7]ufunc函數(shù)-統(tǒng)計函數(shù)>x,rindex=np.unique(a,return_inverse=True)rindexx[rindex]------------------------------------------------------------[4,2,3,4,1,5,3,3,4,0][6,3,4,6,2,7,4,4,6,1]bincount()對非負(fù)整數(shù)數(shù)組中的各個元素出現(xiàn)的次數(shù)進(jìn)行統(tǒng)計,返回數(shù)組中的第i個元素是整數(shù)i出現(xiàn)的次數(shù)。>a=np.array([6,3,4,6,2,7,4,4,6,1])>np.bincount(a)array([0,1,1,1,3,0,3,1])>x=np.array([0,1,2,2,1,1,0])>w=np.array([0.1,0.3,0.2,0.4,0.5,0.8,1.2])>np.bincount(x,w)array([1.3,1.6,0.6])ufunc函數(shù)-統(tǒng)計函數(shù)histogram()對以為數(shù)組進(jìn)行直方圖統(tǒng)計,其參數(shù)為:histogram(a,bins=10,range=None,weights=None)函數(shù)返回兩個一維數(shù)組,hist是每個區(qū)間的統(tǒng)計結(jié)果,bin_edges返回區(qū)間的邊界值。>a=np.random.rand(100)>np.histogram(a,bins=5,range=(0,1))(array([28,18,17,19,18]),array([0.,0.2,0.4,0.6,0.8,1.]))>np.histogram(a,bins=[0,0.4,0.8,1.0])(array([46,36,18]),array([0.,0.4,0.8,1.]))ufunc函數(shù)-統(tǒng)計函數(shù)PandasPandas

-核心數(shù)據(jù)分析支持庫,提供了快速、靈活、明確的數(shù)據(jù)結(jié)構(gòu)。

適用于處理以下類型的數(shù)據(jù):與SQL或Excel表類似的,含異構(gòu)列的表格數(shù)據(jù);有序和無序(非固定頻率)的時間序列數(shù)據(jù);帶行列標(biāo)簽的矩陣數(shù)據(jù),包括同構(gòu)或異構(gòu)型數(shù)據(jù);任意其它形式的觀測、統(tǒng)計數(shù)據(jù)集,數(shù)據(jù)轉(zhuǎn)入Pandas數(shù)據(jù)結(jié)構(gòu)時不必事先標(biāo)記。PandasPandas的主要數(shù)據(jù)結(jié)構(gòu)是Series(一維數(shù)據(jù))與DataFrame(二維數(shù)據(jù)),這兩種數(shù)據(jù)結(jié)構(gòu)足以處理金融、統(tǒng)計、社會科學(xué)、工程等領(lǐng)域里的大多數(shù)典型用例。對于R用戶,DataFrame提供了比R語言data.frame更豐富的功能。Pandas基于NumPy開發(fā),可以與其它第三方科學(xué)計算支持庫完美集成。Pandas下面僅列出了它的部分優(yōu)勢

把Python和NumPy數(shù)據(jù)結(jié)構(gòu)里不規(guī)則、不同索引的數(shù)據(jù)輕松地轉(zhuǎn)換為DataFrame對象成熟的IO工具:讀取文本文件(CSV等支持分隔符的文件)、Excel文件、數(shù)據(jù)庫等來源的數(shù)據(jù),利用超快的

HDF5

格式保存/加載數(shù)據(jù);時間序列:支持日期范圍生成、頻率轉(zhuǎn)換、移動窗口統(tǒng)計、移動窗口線性回歸、日期位移等時間序列功能。PandasPandas速度很快。Pandas的很多底層算法都用Cython優(yōu)化過。然而,為了保持通用性,必然要犧牲一些性能,如果專注某一功能,完全可以開發(fā)出比Pandas更快的專用工具。Pandas是statsmodels的依賴項,因此,Pandas也是Python中統(tǒng)計計算生態(tài)系統(tǒng)的重要組成部分。Pandas基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)本節(jié)介紹Pandas基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),包括各類對象的數(shù)據(jù)類型、索引、軸標(biāo)記、對齊等基礎(chǔ)操作。首先,導(dǎo)入NumPy和Pandas:In[1]:importnumpyasnp

In[2]:importpandasaspdPandas基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)SeriesSeries

是帶標(biāo)簽的一維數(shù)組,可存儲整數(shù)、浮點數(shù)、字符串、Python對象等類型的數(shù)據(jù)。軸標(biāo)簽統(tǒng)稱為索引。調(diào)用

pd.Series

函數(shù)即可創(chuàng)建Series:>>>s=pd.Series(data,index=index)上述代碼中,data

支持以下數(shù)據(jù)類型:Python字典多維數(shù)組標(biāo)量值(如,5)index

是軸標(biāo)簽列表。Pandas基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)-series多維數(shù)組:data

是多維數(shù)組時,index

長度必須與

data

長度一致。沒有指定

index

參數(shù)時,創(chuàng)建數(shù)值型索引,即

[0,...,len(data)-1]。In[3]:s=pd.Series(np.random.randn(5),index=['a',

'b',

'c',

'd',

'e'])

In[4]:sOut[4]:a0.469112b-0.282863c-1.509059d-1.135632e1.212112

dtype:float64In[5]:s.indexOut[5]:Index(['a',

'b',

'c',

'd',

'e'],dtype='object')

In[6]:pd.Series(np.random.randn(5))

Out[6]:

0-0.173215

1

0.119209

2-1.044236

3-0.861849

4-2.104569

dtype:float64Pandas基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)-series字典:Series可以用字典實例化:In[7]:d={'b':

1,

'a':

0,

'c':

2}

In[8]:pd.Series(d)

Out[8]:b1a0c2

dtype:int64注意:data

為字典,且未設(shè)置

index

參數(shù)時,如果Python版本>=3.6且Pandas版本>=0.23,Series

按字典的插入順序排序索引;否則按字典的鍵按字母順序排序。Pandas基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)-series如果設(shè)置了

index

參數(shù),則按索引標(biāo)簽In[9]:d={'a':

0.,

'b':

1.,

'c':

2.}

In[10]:pd.Series(d)

Out[10]:

a0.0

b1.0

c2.0

dtype:float64In[11]:pd.Series(d,index=['b',

'c',

'd',

'a'])

Out[11]:

b1.0

c2.0

dNaNa0.0

dtype:float64Pandas用

NaN(NotaNumber)表示缺失數(shù)據(jù)Pandas基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)-seriesSeries

操作與

ndarray

類似,支持大多數(shù)NumPy函數(shù),還支持索引切片。Series類似固定大小的字典,可以用索引標(biāo)簽提取值或設(shè)置值。Series和多維數(shù)組的主要區(qū)別:Series之間的操作會自動基于標(biāo)簽對齊數(shù)據(jù)。因此,不用顧及執(zhí)行計算操作的Series是否有相同的標(biāo)簽。Pandas數(shù)據(jù)結(jié)構(gòu)-DataFrameDataFrame

是由多種類型的列構(gòu)成的二維標(biāo)簽數(shù)據(jù)結(jié)構(gòu),類似于Excel、SQL表,或Series對象構(gòu)成的字典。DataFrame是最常用的Pandas對象,與Series一樣,DataFrame支持多種類型的輸入數(shù)據(jù):一維ndarray、列表、字典、Series字典二維numpy.ndarraySeriesDataFrame結(jié)構(gòu)多維數(shù)組或記錄多維數(shù)組用Series字典或字典生成DataFrame

生成的索引是每個

Series

索引的并集。先把嵌套字典轉(zhuǎn)換為Series。如果沒有指定列,DataFrame的列就是字典鍵的有序列表。>d={'one':pd.Series([1.,

2.,

3.],index=['a',

'b',

'c']),pd.Series([1.,

2.,

3.,

4.],index=['a',

'b',

'c',

'd'])}>df=pd.DataFrame(d)>dfonetwoa1.0

1.0

b2.0

2.0c3.0

3.0

dNaN4.0用Series字典或字典生成DataFrame

In[40]:pd.DataFrame(d,index=['d',

'b',

'a'])

Out[40]:onetwodNaN4.0b2.02.0a1.01.0In[41]:pd.DataFrame(d,index=['d','b','a'],columns=['two','three'])Out[41]:twothreed4.0NaNb2.0NaNa1.0NaNindex

columns

屬性分別用于訪問行、列標(biāo)簽.用多維數(shù)組字典、列表字典生成DataFrame

多維數(shù)組的長度必須相同。如果傳遞了索引參數(shù),index

的長度必須與數(shù)組一致。In[44]:d={'one':

[1.,

2.,

3.,

4.],

'two':

[4.,

3.,

2.,

1.]}In[46]:pd.DataFrame(d,index=['a',

'b',

'c',

'd'])Out[46]:

onetwoa1.0

4.0

b2.0

3.0

c3.0

2.0

d4.0

1.0用多維數(shù)組字典、列表字典生成DataFrame

多維數(shù)組的長度必須相同。如果傳遞了索引參數(shù),index

的長度必須與數(shù)組一致。In[44]:d={'one':

[1.,

2.,

3.,

4.],

'two':

[4.,

3.,

2.,

1.]}In[45]:pd.DataFrame(d)

Out[45]:

onetwo0

1.0

4.0

1

2.0

3.0

2

3.0

2.0

3

4.0

1.0如果沒有傳遞索引參數(shù),生成的結(jié)果是

range(n),n

為數(shù)組長度。用結(jié)構(gòu)多維數(shù)組或記錄多維數(shù)組生成DataFrame

本例與數(shù)組字典的操作方式相同。

In[47]:data=np.zeros((2,

),dtype=[('A',

'i4'),

('B',

'f4'),

('C',

'a10')])

In[48]:data[:]=[(1,

2.,

'Hello'),

(2,

3.,

"World")]

In[49]:pd.DataFrame(data)

Out[49]:

ABC0

1

2.0

b'Hello'

1

2

3.0

b'World'

In[50]:pd.DataFrame(data,index=['first',

'second'])Out[50]:

ABCfirst1

2.0

b'Hello'

second2

3.0

b'World'In[51]:pd.DataFrame(data,columns=['C',

'A',

'B'])

Out[51]:

CAB0

b'Hello‘

1

2.0

1

b'World'

2

3.0用列表字典生成DataFrame

In[52]:data2=[{'a':

1,

'b':

2},

{'a':

5,

'b':

10,

'c':

20}]

In[53]:pd.DataFrame(data2)

Out[53]:

abc0

1

2NaN1

5

10

20.0

In[54]:pd.DataFrame(data2,index=['first',

'second'])Out[54]:

abcfirst1

2NaNsecond5

10

20.0

In[55]:pd.DataFrame(data2,columns=['a',

'b'])

Out[55]:

ab0

1

2

1

5

10提取、添加、刪除列

DataFrame就像帶索引的Series字典,提取、設(shè)置、刪除列的操作與字典類似:

In[39]:dfOut[39]:

onetwoa1.0

1.0

b2.0

2.0c3.0

3.0

dNaN4.0In[61]:df['one']

Out[61]:

a1.0

b2.0

c3.0

dNaNName:one,

dtype:float64In[62]:df['three']=df['one']*df['two']In[63]:df['flag']=df['one']>2

In[64]:dfOut[64]:

onetwothreeflaga1.0

1.0

1.0

False

b2.0

2.0

4.0

False

c3.0

3.0

9.0

True

dNaN4.0NaNFalse提取、添加、刪除列

刪除(del、pop)列的方式也與字典類似In[65]:

deldf['two']

In[66]:three=df.pop('three')

In[67]:dfOut[67]:

oneflaga1.0

False

b2.0

False

c3.0

True

dNaNFalseIn[64]:dfOut[64]:

onetwothreeflaga1.0

1.0

1.0

False

b2.0

2.0

4.0

False

c3.0

3.0

9.0

True

dNaN4.0NaNFalse索引/選擇

索引基礎(chǔ)用法如下:

選擇行返回Series,索引是DataFrame的列

In[83]:df.loc['b']Out[83]:

one2

bar2

flagFalse

foobarone_trunc2

Name:b,dtype:

object轉(zhuǎn)置

類似于多維數(shù)組,T

屬性(即

transpose

函數(shù))可以轉(zhuǎn)置DataFrame:

In[103]:df[:5].TOut[103]:

2000-01-01

2000-01-02

2000-01-03

2000-01-04

2000-01-05A-1.226825-0.727707

0.695775-1.110336-0.732339

B0.769804-0.121306

0.341734-0.619976

0.687738

C-1.281247-0.097883

0.959726

0.149748

0.176444Pandas讀取文件import

numpy

as

npimportscipyasspimportpandasaspdimportmatplotlibasmplimportseabornassns#讀取CSV數(shù)據(jù)df=pd.read_csv("/examples/python/data_analysis/Salaries.csv")#讀取其他格式數(shù)據(jù)pd.read_excel('myfile.xlsx',sheet_name='Sheet1',index_col=None,na_values=['NA'])pd.read_stata('myfile.dta')pd.read_sas('myfile.sas7bdat')pd.read_hdf('myfile.h5','df')探索數(shù)據(jù)框df.head()df.describe()PandasDataFrame數(shù)據(jù)類型

Pandas類型原始Python類型描述objectstringThemostgeneraldtype.Willbeassignedtoyourcolumnifcolumnhasmixedtypes(numbersandstrings).int64intNumericcharacters.64referstothememoryallocatedtoholdthischaracter.float64floatNumericcharacterswithdecimals.IfacolumncontainsnumbersandNaNs(seebelow),pandaswilldefaulttofloat64,incaseyourmissingvaluehasadecimal.datetime64,timedelta[ns]N/AValuesmeanttoholdtimedata.Lookintothesefortimeseriesexperiments.DataFrame數(shù)據(jù)類型#Checkaparticularcolumntypedf['salary'].dtype#Checktypesforallthecolumnsdf.dtypesDataFrames屬性df.attribute描述dtypeslistthetypesofthecolumnscolumnslistthecolumnnamesaxeslisttherowlabelsandcolumnnamesndimnumberofdimensionssizenumberofelementsshapereturnatuplerepresentingthedimensionalityvaluesnumpyrepresentationofthedataDataFrames方法df.method()描述head([n]),tail([n])first/lastnrowsdescribe()generatedescriptivestatistics(fornumericcolumnsonly)max(),min()returnmax/minvaluesforallnumericcolumnsmean(),median()returnmean/medianvaluesforallnumericcolumnsstd()standarddeviationsample([n])returnsarandomsampleofthedataframedropna()dropalltherecordswithmissingvalues提取數(shù)據(jù)框的列使用列變量名稱df['sex']將列變量名稱作為屬性df.sex數(shù)據(jù)框篩選df_sub=df[df['salary']>120000]>greater;>=greaterorequal;<less;<=lessorequal;==equal;!=notequal;數(shù)據(jù)框篩選methodloc方法10.3Matplotlib簡介

matplotlib是python最著名的繪圖庫,它提供了一整套和matlab相似的命令A(yù)PI,十分適合交互式地進(jìn)行制圖。而且也可以方便地將它作為繪圖控件,嵌入GUI應(yīng)用程序中。它的文檔相當(dāng)完備,并且Gallery頁面中有上百幅縮略圖,打開之后都有源程序。因此如果你需要繪制某種類型的圖,只需要在這個頁面中瀏覽/復(fù)制/粘貼一下,基本上都能搞定。

展示頁面的地址:/gallery.html快速繪圖快速繪圖matplotlib的pyplot子庫提供了和matlab類似的繪圖API,方便用戶快速繪制2D圖表。(matplotlib_simple_plot.py)

pylab模塊matplotlib還提供了名為pylab的模塊,其中包括了許多numpy和pyplot中常用的函數(shù),方便用戶快速進(jìn)行計算和繪圖,可以用于IPython中的快速交互式使用。

快速繪圖matplotlib中的快速繪圖的函數(shù)庫可以通過如下語句載入:接下來調(diào)用figure創(chuàng)建一個繪圖對象,并且使它成為當(dāng)前的繪圖對象。通過figsize參數(shù)可以指定繪圖對象的寬度和高度,單位為英寸;dpi參數(shù)指定繪圖對象的分辨率,即每英寸多少個像素,缺省值為80。因此本例中所創(chuàng)建的圖表窗口的寬度為8*80=640像素。importmatplotlib.pyplotaspltplt.figure(figsize=(8,4))快速繪圖也可以不創(chuàng)建繪圖對象直接調(diào)用接下來的plot函數(shù)直接繪圖,matplotlib會自動創(chuàng)建一個繪圖對象。

如果需要同時繪制多幅圖表的話,可以是給figure傳遞一個整數(shù)參數(shù)指定圖標(biāo)的序號,如果所指定序號的繪圖對象已經(jīng)存在的話,將不創(chuàng)建新的對象,而只是讓它成為當(dāng)前繪圖對象。下面的兩行程序通過調(diào)用plot函數(shù)在當(dāng)前的繪圖對象中進(jìn)行繪圖:plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)plt.plot(x,z,"b--",label="$cos(x^2)$")快速繪圖plot函數(shù)的調(diào)用方式很靈活,第一句將x,y數(shù)組傳遞給plot之后,用關(guān)鍵字參數(shù)指定各種屬性:?label:給所繪制的曲線一個名字,此名字在圖示(legend)中顯示。只要在字符串前后添加''$''符號,matplotlib就會使用其內(nèi)嵌的latex引擎繪制的數(shù)學(xué)公式。?color:指定曲線的顏色?linewidth:指定曲線的寬度第三個參數(shù)‘’b--``指定曲線的顏色和線型plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)plt.plot(x,z,"b--",label="$cos(x^2)$“)快速繪圖接下來通過一系列函數(shù)設(shè)置繪圖對象的各個屬性:?xlabel/ylabel:設(shè)置X軸/Y軸的文字?title:設(shè)置圖表的標(biāo)題?ylim:設(shè)置Y軸的范圍?legend:顯示圖示最后調(diào)用plt.show()顯示出創(chuàng)建的所有繪圖對象。plt.xlabel("Time(s)")plt.ylabel("Volt")plt.title("PyPlotFirstExample")plt.ylim(-1.2,1.2)plt.legend()快速繪圖

importnumpyasnpimportmatplotlib.pyplotasplt

x=np.linspace(0,10,1000)y=np.sin(x)z=np.cos(x**2)

plt.figure(figsize=(8,4))plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)plt.plot(x,z,"b--",label="$cos(x^2)$")plt.xlabel("Time(s)")plt.ylabel("Volt")plt.title("PyPlotFirstExample")plt.ylim(-1.2,1.2)plt.legend()plt.show()快速繪圖快速繪圖還可以調(diào)用plt.savefig()將當(dāng)前的Figure對象保存成圖像文件,圖像格式由圖像文件的擴(kuò)展名決定。下面的程序?qū)?dāng)前的圖表保存為“test.png”,并且通過dpi參數(shù)指定圖像的分辨率為120,因此輸出圖像的

溫馨提示

  • 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

提交評論