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