農林漁牧網

您現在的位置是:首頁 > 農業

Python資料分析常用函式及引數詳解,可以留著以備不時之需

2021-12-30由 社會愛智者521 發表于 農業

型別轉換函式能帶幾個引數

利用Python進行資料分析最核心的庫就是Pandas,可以說,掌握了Pandas庫,Python資料分析就屬於中階水平了。

在《

一次簡單、完整的Python資料分析,讓我們不再害怕Python!

》一文中我們介紹了Python進行資料分析全流程的幾個主要函式。但由於實際中的分析需求可能比較複雜,就要求對資料做更加複雜的處理。

所以,我們有必要提前準備一些常用的函式,這些函式不用全部會,知道有這些函式,並做到在我們要實現資料處理邏輯時,知道有什麼函式可用就夠了。

為了便於學習這些函式,本文按照各自型別進行了分門別類。

01

幾點注意事項

在介紹具體的函式時,說幾點注意事項:

初學時最好習慣於寫引數名稱;

根據函式的作用去理解它可以作用於哪種物件,又會返回何種物件;

函式(也就是物件的方法)需要有括號,檢視物件屬性沒有括號。

axis=i,表示i維進行變化,而其他維度不變。例如,當i=0時,就是說行維度值進行變化,其它維度不變,這就表明是按列進行處理。

02

常用函式

為了便於我們掌握,我們結合資料分析的流程和其內部函式的作用,將其分為以下幾類,具體見下圖。

Python資料分析常用函式及引數詳解,可以留著以備不時之需

(1)物件建立

pandas中有兩種重要物件:Series和DataFrame。前者類似一維陣列,後者可看成Excel中的表格資料。後文將用df表示任意的DataFrame物件,用s表示任意的Series物件,用pd表示pandas庫。

pd。Series(data=, index=, dtype=,……)

#data可為列表、字典等多種型別,其餘引數為可選項

pd。DataFrame(data=, index=, columns=,……)

#data可為字典、陣列等多種型別資料讀取

(2)資料讀取

資料讀取重點掌握以下三種。

pd。read_table(filename, sep=‘\t’, header=0, index_col=None,……)

#要讀取的檔名稱是必須輸入的引數,其餘為可選項,header為要選取哪一行作為列名稱,預設第一行

pd。read_csv(filename, sep=‘,’, header=0, index_col=None,……)

#與上面的函式用法大致相同

pd。read_excel(filename,sheet_name=0, header=0,index_col=None,……)

#從Excel檔案讀入資料,增加了sheet_name引數的選項,代表要讀取第幾個工作表的資料

(3)資料描述

在讀完資料後,我們要先檢視資料的整體情況。

df。info()

#檢視資料框基本資訊,包含多少行和列,每列什麼型別等等

df。descirbe()

#檢視資料的整體描述,統計的是數值型列

df。head(n)

#檢視前n行

df。tail(n)

#檢視後n行

df。count(axis=0)

#非空值個數,返回Series,0為按列統計,1為按行統計

df。isna()

#返回每個元素是否是缺失值的bool資料框

df。isnull()

#返回每個元素是否是空值的bool資料框

df。columns

#返回Index型別的列的集合,因為列名稱是屬性,所以沒有括號

df。dtypes

#每一列的資料型別

df。index

#行索引名,返回Index型別的索引的集合

df。shape

#返回(行數,列數)格式的元組

df。values

#值的二維陣列,返回numpy。ndarray物件

s。nunique()

#返回唯一值個數

s。unique()

#唯一值資料,返回array格式

(3)資料篩選

資料篩選的本質無外乎就是根據行和列的特性來選擇滿足我們需求的資料,掌握這些基本的篩選方法就可以組合複雜的篩選方法。

df[“col1”]

#選擇某一列,返回的是Series型別

df[[“col1”]]

#選擇某一列,返回的是DataFrame型別

df[df[“col1”] > 1]

#選取滿足條件的行,

df[“col”]>1

#返回的還是一個數據框,只是每個值為bool值

df。query(“col1 > 1”)

#這種方法也可選取滿足條件的行

df。loc[m:n]

#按照行索引選取m~n行,注意是包含n的

df。loc[m:n,‘col1’:‘coln’]

#注意loc函式的引數都是索引名

df。iloc[m:n]

#獲取從m~n-1行,iloc函式代表的是位置,即引數都是數字,代表第幾行第幾列

df。select_dtypes(include=None, exclude=None)

#按照資料型別選擇列

df。isin(values=)

#資料框中資料是否存在於values中,返回的是DataFrame型別

(4)資料清洗

資料清洗主要是一些重複值、缺失值和索引名稱等問題的處理。

df。duplicated(subset=[“col”],keep=first)

#各行是否是重複行,返回Series,keep引數為first,last,False,first意思是第一次出現的重複值保留。

df。drop_duplicates(subset=[“col”],keep=first,ignore_index=True)

#根據列刪除重複行,返回刪除後的結果資料

df。fillna(value=,inplace=)

#用value值填充na,返回填充後的結果資料df。dropna(axis=0,how=‘any’,inplace=False)

#axis=0即行,how有‘any’和‘all’兩個選項,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)資料處理

資料處理的範疇很廣,包含資料的統計彙總,也包含資料的轉換,做這一塊時腦中要同時進行抽象處理,便於檢視邏輯是否有錯。

pd。merge(df1, df2, on=’col1‘,left_on=’col1‘,right_on=’col2‘,how=’inner‘,sort=False) #how有outer,left,right選項,預設inner,suffixes表示在相同的列名新增字尾

pd。concat([df1,df2,df3], axis=0,join=’outer‘,ignore_index=False,keys=[“x”,“y”,“z”])

#按行或是按列拼接多個數據框或Series,axis=0為按列拼接,即增加在行下面,key新增層次化索引

df1。append(df2,ignore_index=False)

#可為df也可為s,按列新增,即新增行,ignor_index=False意思是都按照原先的行索引值

df。stack(level=-1,dropna=True)

#列旋轉成行,也就是列名變為行索引名,原索引變成多層索引,evel表示選取哪個索引進行轉換,-1表示最內層的索引,0表示第一層索引

df。unstack(level=-1,fill_value=None)

#行轉列,預設從最內層索引開始df。pivot_table(index=[“col1”,“col2”],values=[“col3”],columns=[“col4”],aggfunc=“count”)

#類似於Excel中的資料透視表,index表示選擇行,column是選擇列,values是進行函式計算的列

df。groupby([“col1”])#根據列對資料框進行分組,返回分組物件

df。groupby([“col1”])[“col2”]。count()#表示根據col1列進行分組,統計col2列的行數。這種方式是最為常用的統計彙總方法

df。agg({“col1”:“count”,“col2”:“sum”},axis=0) #agg是聚合的別名,表示對不同列用不同函式進行統計,返回Series物件

df。sort_values(by=’col1‘,axis=0,ascending=True, inplace=False, na_position={“last”,“first”})

#按照某一列對資料框進行排序

df。apply(lambda x :x。max()-x。min(),axis=0)

#預設引數axis=0,表示按列對資料進行操作

df。applymap(lambda x : 1 if x>0 else 0)

#對資料框每一個數據進行操作,返回DataFrame格式

s。map(lambda x : 1 if x>0 else 0)

#對Series的每一個數據進行,不能對DataFrame操作

s。value_counts()

#對Series中資料進行分類彙總

pd。cut(s,bins=[-np。inf,0,np。inf],labels=list(“abc”))

#bins為左開右閉區間,將Series資料進行分類

df。where(df<0,0) #與numpy的where函式有不同,後面的值表示不滿足條件的賦值為0,滿足的話就不變

pd。date_range(start=’2020-01-01‘,end=’2020-02-01‘,periods=,freq=“D”)

#periods為期數,注意不要衝突,freq為型別,種類有很多,預設是天,M為月尾,MS為月初

03

結語

函式還有很多,但都不太常見了。我們平時學習的時候可以養成記筆記的好習慣,即把出現的函式記下來,分門別類地彙總在一起,等記不清時就可以直接在彙總中查找了,閒暇時也可以瞅一瞅,這樣次數多了後就會慢慢全部記住了。