利用Python進行數(shù)據(jù)分析最核心的庫就是Pandas,可以說,掌握了Pandas庫,Python數(shù)據(jù)分析就屬于中階水平了。 在《一次簡單、完整的全流程數(shù)據(jù)分析,讓我們不再害怕Python 》一文中我們介紹了Python進行數(shù)據(jù)分析全流程的幾個主要函數(shù)。但由于實際中的分析需求可能比較復雜,就要求對數(shù)據(jù)做更加復雜的處理。 所以,我們有必要提前準備一些常用的函數(shù),這些函數(shù)不用全部會,知道有這些函數(shù),并做到在我們要實現(xiàn)數(shù)據(jù)處理邏輯時,知道有什么函數(shù)可用就夠了。 為了便于學習這些函數(shù),本文按照各自類型進行了分門別類。 幾點注意事項在介紹具體的函數(shù)時,說幾點注意事項:
常用函數(shù)為了便于我們掌握,我們結合數(shù)據(jù)分析的流程和其內(nèi)部函數(shù)的作用,將其分為以下幾類,具體見下圖。 (1)對象創(chuàng)建 pandas中有兩種重要對象:Series和DataFrame。前者類似一維數(shù)組,后者可看成Excel中的表格數(shù)據(jù)。后文將用df表示任意的DataFrame對象,用s表示任意的Series對象,用pd表示pandas庫。 df.duplicated(subset=['col'],keep=first) #各行是否是重復行,返回Series,keep參數(shù)為first,last,False,first意思是第一次出現(xiàn)的重復值保留。df.drop_duplicates(subset=['col'],keep=first,ignore_index=True) #根據(jù)列刪除重復行,返回刪除后的結果數(shù)據(jù)df.fillna(value=,inplace=) #用value值填充na,返回填充后的結果數(shù)據(jù)df.dropna(axis=0,how='any',inplace=False) #axis=0即行,how有‘a(chǎn)ny’和‘a(chǎn)ll’兩個選項,all表示所有值都為NA才刪除df.drop(labels=0,columns=['col1'],axis=0,) #刪除指定列,也可以刪除行,axis作用不大 df.rename(index={'row1':'A'},columns={'col1':'A1'}) df.replace(to_replace=np.nan,value=0,inplace=False) #替換df值,前后值可以用字典表,{1:‘A', '2':'B'} (2)數(shù)據(jù)讀取 數(shù)據(jù)讀取重點掌握以下三種。
(3)數(shù)據(jù)描述 在讀完數(shù)據(jù)后,我們要先查看數(shù)據(jù)的整體情況。 df.info() #查看數(shù)據(jù)框基本信息,包含多少行和列,每列什么類型等等df.descirbe() #查看數(shù)據(jù)的整體描述,統(tǒng)計的是數(shù)值型列df.head(n) #查看前n行df.tail(n) #查看后n行df.count(axis=0) #非空值個數(shù),返回Series,0為按列統(tǒng)計,1為按行統(tǒng)計df.isna()#返回每個元素是否是缺失值的bool數(shù)據(jù)框df.isnull()#返回每個元素是否是空值的bool數(shù)據(jù)框df.columns#返回Index類型的列的集合,因為列名稱是屬性,所以沒有括號df.dtypes#每一列的數(shù)據(jù)類型df.index#行索引名,返回Index類型的索引的集合df.shape#返回(行數(shù),列數(shù))格式的元組df.values#值的二維數(shù)組,返回numpy.ndarray對象s.nunique()#返回唯一值個數(shù)s.unique()#唯一值數(shù)據(jù),返回array格式 (3)數(shù)據(jù)篩選 數(shù)據(jù)篩選的本質(zhì)無外乎就是根據(jù)行和列的特性來選擇滿足我們需求的數(shù)據(jù),掌握這些基本的篩選方法就可以組合復雜的篩選方法。
(4)數(shù)據(jù)清洗 數(shù)據(jù)清洗主要是一些重復值、缺失值和索引名稱等問題的處理。 df.duplicated(subset=['col'],keep=first) #各行是否是重復行,返回Series,keep參數(shù)為first,last,False,first意思是第一次出現(xiàn)的重復值保留。df.drop_duplicates(subset=['col'],keep=first,ignore_index=True) #根據(jù)列刪除重復行,返回刪除后的結果數(shù)據(jù)df.fillna(value=,inplace=) #用value值填充na,返回填充后的結果數(shù)據(jù)df.dropna(axis=0,how='any',inplace=False)#axis=0即行,how有‘a(chǎn)ny’和‘a(chǎn)ll’兩個選項,all表示所有值都為NA才刪除df.drop(labels=0,columns=['col1'],axis=0,) #刪除指定列,也可以刪除行,axis作用不大 df.rename(index={'row1':'A'},columns={'col1':'A1'}) #重命名行索引和列名稱df.replace(to_replace=np.nan,value=0,inplace=False) #替換df值,前后值可以用字典表示,如{'a':‘A', 'b':'B'}df.columns=pd.MultiIndex.from_tuples(indx) #構建層次化索引 (5)數(shù)據(jù)處理 數(shù)據(jù)處理的范疇很廣,包含數(shù)據(jù)的統(tǒng)計匯總,也包含數(shù)據(jù)的轉(zhuǎn)換,做這一塊時腦中要同時進行抽象處理,便于查看邏輯是否有錯。
結語函數(shù)還有很多,但都不太常見了。我們平時學習的時候可以養(yǎng)成記筆記的好習慣,即把出現(xiàn)的函數(shù)記下來,分門別類地匯總在一起,等記不清時就可以直接在匯總中查找了,閑暇時也可以瞅一瞅,這樣次數(shù)多了后就會慢慢全部記住了。 |
|