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