Python數(shù)據(jù)分析——Numpy、Pandas庫
▼
利用Python進(jìn)行數(shù)據(jù)分析中有兩個(gè)重要的庫是Numpy和Pandas,本章將圍繞這兩個(gè)庫進(jìn)行展開介紹。
Numpy庫
Numpy最重要的一個(gè)特點(diǎn)是就是其N維數(shù)組對(duì)象,即ndarray,ndarray是一個(gè)通用的同構(gòu)數(shù)據(jù)多維容器,其中的所有元素必須是相同類型的。每個(gè)數(shù)組都有一個(gè)shape(一個(gè)表示各維度大小的元組,即表示有幾行幾列)和dtype(一個(gè)用于說明數(shù)組數(shù)據(jù)類型的對(duì)象)。本節(jié)將圍繞ndarray數(shù)組展開。
Numpy基礎(chǔ)
1、創(chuàng)建ndarray數(shù)組
使用array函數(shù),它接受一切序列型的對(duì)象,包括其他數(shù)組,然后產(chǎn)生一個(gè)新的Numpy數(shù)組。
嵌套序列將會(huì)被轉(zhuǎn)換成一個(gè)多維數(shù)組。
np.array會(huì)嘗試為每一個(gè)新建的數(shù)組推斷出適合它的數(shù)據(jù)類型。
arange是Python內(nèi)置函數(shù)range的數(shù)組版。
2、數(shù)據(jù)類型
dtype是一個(gè)用來說明數(shù)組的數(shù)據(jù)類型的對(duì)象。其命名方式是一個(gè)類型名(float和int)后面跟一個(gè)用于表示各元素位長的數(shù)字。常用的是float64和int32.
也可以使用astype進(jìn)行數(shù)組中數(shù)據(jù)類型的轉(zhuǎn)化。
3、基本的索引和切片
(1)元素索引、根據(jù)元素在數(shù)組中的位置來進(jìn)行索引。
一維數(shù)組的索引
多維數(shù)組的索引
(2)切片索引
一維數(shù)組的切片索引(與Python列表的切片索引一樣)
多維數(shù)組的切片索引
(3)花式索引
元素索引和切片索引都是僅局限于連續(xù)區(qū)域的值,而花式索引可以選取特定區(qū)域的值。
上述語句選出的是元素(1,0)、(5,3)、(7,1)、(2,2)。
上述語句按0、3、1、2列的順序依次顯示1、5、7、2行。下述語句能實(shí)現(xiàn)同樣的效果。
Numpy數(shù)組的基本運(yùn)算
1、數(shù)組和標(biāo)量之間的預(yù)算
2、元素級(jí)數(shù)組函數(shù)
是指對(duì)數(shù)組中每個(gè)元素執(zhí)行函數(shù)運(yùn)算。下面例子是對(duì)數(shù)組各元素執(zhí)行平方根操作。還有abs、exp、sin、cos、log、sum、mean(算術(shù)平均數(shù))、cumsum(所有元素的累計(jì)和)、cumprod(所有元素的累計(jì)積)、sort(將元素進(jìn)行排序)等函數(shù)。
Pandas庫
Pandas數(shù)據(jù)結(jié)構(gòu)
1、Series
(1)概念:
Series是一種類似于一維數(shù)組的對(duì)象,它由一組數(shù)據(jù)以及一組與之相關(guān)的數(shù)據(jù)標(biāo)簽(即索引)組成。
(2)創(chuàng)建Series
a、通過series來創(chuàng)建
Series的字符串表現(xiàn)形式為:索引在左邊,值在右邊。當(dāng)我們沒有為數(shù)據(jù)指定索引時(shí),Series會(huì)自動(dòng)創(chuàng)建一個(gè)0到N-1(N為數(shù)據(jù)的長度)的整數(shù)型索引。可以通過Series的values和index屬性獲取其數(shù)組的值和對(duì)應(yīng)的屬性。
也可以在創(chuàng)建Series的時(shí)候?yàn)橹抵苯觿?chuàng)建索引。
b、通過字典的形式來創(chuàng)建Series。
(3)獲取Series中的值
通過索引的方式選取Series中的單個(gè)或一組值。
2、DataFrame
(1)概念:
DataFrame是一個(gè)表格型的數(shù)據(jù)結(jié)構(gòu),含有一組有序的列,每列可以是不同的值類型(數(shù)值、字符串、布爾值等)。DataFrame既有行索引也有列索引,其中的數(shù)據(jù)是以一個(gè)或多個(gè)二維塊存放的,而不是列表、字典或別的一維數(shù)據(jù)結(jié)構(gòu)。
(2)創(chuàng)建DataFrame:
最常用的一種方法是直接傳入一個(gè)等長列表或numpy數(shù)組組成的字典:
結(jié)果DataFrame會(huì)自動(dòng)加上索引(添加方法與Series一樣),且全部列會(huì)被有序排列。
如果指定了列序列、索引,則DataFrame的列會(huì)按指定順序及索引進(jìn)行排列。
也可以設(shè)置DataFrame的index和columns的name屬性,則這些信息也會(huì)被顯示出來。
(3)獲取DataFrame的值(行或列)
通過查找columns值獲取對(duì)應(yīng)的列。(下面兩種方法)
通過索引字段ix查找相應(yīng)的行。
(4)對(duì)列進(jìn)行賦值處理。
對(duì)某一列可以賦一個(gè)標(biāo)量值也可以是一組值。
也可以給某一列賦值一個(gè)列表或數(shù)組,其長度必須跟DataFrame長度相匹配。如果賦值的是一個(gè)Series,則對(duì)應(yīng)的索引位置將被賦值,其他位置的值被賦予空值。
Pandas基本功能
1、重新索引
Pandas對(duì)象的一個(gè)方法就是重新索引(reindex),其作用是創(chuàng)建一個(gè)新的索引,pandas對(duì)象將按這個(gè)新索引進(jìn)行排序。對(duì)于不存在的索引值,引入缺失值。
也可以按columns(行)進(jìn)行重新索引,對(duì)于不存在的列名稱,將被填充空值。
對(duì)于不存在的索引值帶來的缺失值,也可以在重新索引時(shí)使用fill_value給缺失值填充指定值。
對(duì)于缺失值除使用fill_value的方式填充特定值以外還可以使用method=ffill(向前填充、即后面的缺失值用前面非缺失值填充)、bfill(向后填充,即前面的缺失值用后面的非缺失值填充)。
2、丟棄指定軸上的項(xiàng)
使用drop方法刪除指定索引值對(duì)應(yīng)的對(duì)象。
可以同時(shí)刪除多個(gè)索引對(duì)應(yīng)的值。
對(duì)于DataFrame,可以刪除任意軸上(columns)的索引值。
3、算數(shù)運(yùn)算和數(shù)據(jù)對(duì)齊
(1)Series 與Series之間的運(yùn)算
將不同索引的對(duì)象進(jìn)行算數(shù)運(yùn)算,在將對(duì)象進(jìn)行相加時(shí),如果存在時(shí),則結(jié)果的索引就是該索引的并集,而結(jié)果的對(duì)象為空。
(2)DataFrame與Series之間的運(yùn)算
將DataFrame的每一行與Series分別進(jìn)行運(yùn)算。(索引相同的進(jìn)行算數(shù)運(yùn)算,索引不同的被賦予空值)
4、排序和排名
根據(jù)某種條件對(duì)數(shù)據(jù)集進(jìn)行排序。
(1)Series數(shù)據(jù)結(jié)構(gòu)的排序和排名
a、按索引值進(jìn)行排序
b、按值進(jìn)行排序
默認(rèn)情況下,排序是按升序排列的,但也可通過ascending=False進(jìn)行降序排列。
排名跟排序不同的是,排名會(huì)增設(shè)一個(gè)排名值。obj.rank()
(2)DataFrame數(shù)據(jù)結(jié)構(gòu)的排序和排名
按索引值進(jìn)行排列,一列或多列中的值進(jìn)行排序,通過by將列名傳遞給sort_index.
5、缺失數(shù)據(jù)處理
(1)濾出缺失數(shù)據(jù)
使用data.dropna()可以濾出缺失數(shù)據(jù),默認(rèn)情況下,data.dropna()濾出含有缺失值的所有行(是含有缺失數(shù)據(jù)的那一整行)。
傳入how=‘a(chǎn)ll’將只濾出全是缺失值的那一行。
要用這種方式濾出列,只需傳入axis=1即可。
(2)填充缺失數(shù)據(jù)
通過調(diào)用函數(shù)fillna,并給予這個(gè)函數(shù)一個(gè)值,則該數(shù)組中所有的缺失值都將被這個(gè)值填充。df.fillna(0)——缺失值都將被0填充。
也可以給fillna函數(shù)一個(gè)字典,就可以實(shí)現(xiàn)對(duì)不同的列填充不同的值。
Df.fillna({1:0.5,3:-1})——1列的缺失值用0.5填充,3列的缺失值用-1填充。(列從0開始計(jì)數(shù))
6、匯總和計(jì)算描述統(tǒng)計(jì)
就是針對(duì)數(shù)組進(jìn)行常用的數(shù)學(xué)和統(tǒng)計(jì)運(yùn)算。大部分都屬于約簡(jiǎn)和匯總統(tǒng)計(jì)。
其中有求和(sum)運(yùn)算、累計(jì)(cumsum)運(yùn)算、平均值(mean)等運(yùn)算。這些運(yùn)算默認(rèn)都是針對(duì)于行的運(yùn)算,通過使用axis=1進(jìn)行列的運(yùn)算。
Describe既不是約簡(jiǎn)型也不是累計(jì)型,他是用于一次性產(chǎn)生多個(gè)匯總統(tǒng)計(jì)指標(biāo)的運(yùn)算。根據(jù)數(shù)組中數(shù)據(jù)的類型不同,產(chǎn)生的統(tǒng)計(jì)指標(biāo)不同,有最值、分位數(shù)(四分位、四分之三)、標(biāo)準(zhǔn)差、方差等指標(biāo)。
7、唯一值的獲取
此方法可以用于顯示去重后的數(shù)據(jù)。
8、值計(jì)數(shù)
用于計(jì)算一個(gè)Series中各值出現(xiàn)的次數(shù)。
9、層次化索引
層次化索引是pandas的一個(gè)重要功能,它的作用是使你在一個(gè)軸上擁有兩個(gè)或多個(gè)索引級(jí)別。相當(dāng)于Excel中vlookup函數(shù)的多條件查找中的多條件。
對(duì)于層次化索引對(duì)象,選取數(shù)據(jù)的方式可以通過內(nèi)層索引,也可以通過外層索引來選取,選取方式和單層索引選取的方式一致。
聯(lián)系客服