當前位置:生活全書館 >

IT科技

> pandas教程

pandas教程

1、pandas簡介:

pandas是python+data+analysis的組合縮寫,是python中基於numpy和matplotlib的第三方資料分析庫,與後兩者共同構成了python資料分析的基礎工具包,享有數分三劍客之名。

2、pandas資料結構:

pandas核心資料結構有兩種,即一維的series和二維的dataframe,二者可以分別看做是在numpy一維陣列和二維陣列的基礎上增加了相應的標籤資訊。正因如此,可以從兩個角度理解series和dataframe:

series和dataframe分別是一維和二維陣列,因為是陣列,所以numpy中關於陣列的用法基本可以直接應用到這兩個資料結構,包括資料建立、切片訪問、通函式、廣播機制等

series是帶標籤的一維陣列,所以還可以看做是類字典結構:標籤是key,取值是value;而dataframe則可以看做是巢狀字典結構,其中列名是key,每一列的series是value。所以從這個角度講,pandas資料建立的一種靈活方式就是通過字典或者巢狀字典,同時也自然衍生出了適用於series和dataframe的類似字典訪問的介面,即通過loc索引訪問。

pandas教程

3、 資料讀寫:

pandas支援大部分的主流檔案格式進行資料讀寫,常用格式及介面為:

文字檔案,主要包括csv和txt兩種等,相應介面為read_csv()和to_csv(),分別用於讀寫資料

Excel檔案,包括xls和xlsx兩種格式均得到支援,底層是呼叫了xlwt和xlrd進行excel檔案操作,相應介面為read_excel()和to_excel()

SQL檔案,支援大部分主流關係型資料庫,例如MySQL,需要相應的資料庫模組支援,相應介面為read_sql()和to_sql()

此外,pandas還支援html、json等檔案格式的讀寫操作。

4、資料訪問:

series和dataframe兼具numpy陣列和字典的結構特性,所以資料訪問都是從這兩方面入手。同時,也支援bool索引進行資料訪問和篩選。

[ ],這是一個非常便捷的訪問方式,不過需區分series和dataframe兩種資料結構理解:

series:既可以用標籤也可以用數字索引訪問單個元素,還可以用相應的切片訪問多個值,因為只有一維資訊,自然毫無懸念

dataframe:無法訪問單個元素,只能返回一列、多列或多行:單值或多值(多個列名組成的列表)訪問時按列進行查詢,單值訪問不存在列名歧義時還可直接用屬性符號" . "訪問。切片形式訪問時按行進行查詢,又區分數字切片和標籤切片兩種情況:當輸入數字索引切片時,類似於普通列表切片;當輸入標籤切片時,執行範圍查詢(即無需切片首末值存在於標籤列中),包含兩端標籤結果,無匹配行時返回為空,但要求標籤切片型別與索引型別一致。例如,當標籤列型別(可通過df.index.dtype檢視)為時間型別時,若使用無法隱式轉換為時間的字串作為索引切片,則引發報錯。

pandas教程 第2張

5、資料處理:

pandas最為強大的功能當然是資料處理和分析,可獨立完成資料分析前的絕大部分資料預處理需求。簡單歸納來看,主要可分為以下幾個方面:

資料清洗

資料處理中的清洗工作主要包括對空值、重複值和異常值的處理:

空值

判斷空值,isna或isnull,二者等價,用於判斷一個series或dataframe各元素值是否為空的bool結果。需注意對空值的界定:即None或numpy.nan才算空值,而空字串、空列表等則不屬於空值;類似地,notna和notnull則用於判斷是否非空

填充空值,fillna,按一定策略對空值進行填充,如常數填充、向前/向後填充等,也可通過inplace引數確定是否本地更改

刪除空值,dropna,刪除存在空值的整行或整列,可通過axis設定,也包括inplace引數

重複值

檢測重複值,duplicated,檢測各行是否重複,返回一個行索引的bool結果,可通過keep引數設定保留第一行/最後一行/無保留,例如keep=first意味著在存在重複的多行時,首行被認為是合法的而可以保留

刪除重複值,drop_duplicates,按行檢測並刪除重複的記錄,也可通過keep引數設定保留項。由於該方法預設是按行進行檢測,如果存在某個需要需要按列刪除,則可以先轉置再執行該方法

異常值,判斷異常值的標準依賴具體分析資料,所以這裡僅給出兩種處理異常值的可選方法

刪除,drop,接受引數在特定軸線執行刪除一條或多條記錄,可通過axis引數設定是按行刪除還是按列刪除

替換,replace,非常強大的功能,對series或dataframe中每個元素執行按條件替換操作,還可開啟正則表示式功能

數值計算

由於pandas是在numpy的基礎上實現的,所以numpy的常用數值計算操作在pandas中也適用:

通函式ufunc,即可以像操作純量一樣對series或dataframe中的所有元素執行同一操作,這與numpy的特性是一致的,例如前文提到的replace函式,本質上可算作是通函式。如下實現對資料表中逐元素求平方

廣播機制,即當維度或形狀不匹配時,會按一定條件廣播後計算。由於pandas是帶標籤的陣列,所以在廣播過程中會自動按標籤匹配進行廣播,而非類似numpy那種純粹按順序進行廣播。例如,如下示例中執行一個dataframe和series相乘,雖然二者維度不等、大小不等、標籤順序也不一致,但仍能按標籤匹配得到預期結果

字串向量化,即對於資料型別為字串格式的一列執行向量化的字串操作,本質上是呼叫series.str屬性的系列介面,完成相應的字串操作。尤為強大的是,除了常用的字串操作方法,str屬性介面中還集成了正則表示式的大部分功能,這使得pandas在處理字串列時,兼具高效和強力。例如如下程式碼可用於統計每個句子中單詞的個數

時間型別向量化操作,如字串一樣,在pandas中另一個得到"優待"的資料型別是時間型別,正如字串列可用str屬性呼叫字串介面一樣,時間型別列可用dt屬性呼叫相應介面,這在處理時間型別時會十分有效。

pandas教程 第3張

資料轉換

pandas還提供了更為強大的資料轉換方法

map,適用於series對

pandas教程 第4張
象,功能與python中的普通map函式類似,即對給定序列中的每個值執行相同的對映操作,不同的是series中的map介面的對映方式既可以是一個函式,也可以是一個字典

apply,既適用於series物件也適用於dataframe物件,但對二者處理的粒度是不一樣的:apply應用於series時是逐元素執行函式操作;apply應用於dataframe時是逐行或者逐列執行函式操作(通過axis引數設定對行還是對列,預設是行),僅接收函式作為引數

applymap,僅適用於dataframe物件,且是對dataframe中的每個元素執行函式操作,從這個角度講,與replace類似,applymap可看作是dataframe物件的通函式。

合併與拼接

pandas中又一個重量級資料處理功能是對多個dataframe進行合併與拼接,對應SQL中兩個非常重要的操作:union和join。pandas完成這兩個功能主要依賴以下函式:

concat,與numpy中的concatenate類似,但功能更為強大,可通過一個axis引數設定是橫向或者拼接,要求非拼接軸向標籤唯一(例如沿著行進行拼接時,要求每個df內部列名是唯一的,但兩個df間可以重複,畢竟有相同列才有拼接的實際意義)

merge,完全類似於SQL中的join語法,僅支援橫向拼接,通過設定連線欄位,實現對同一記錄的不同列資訊連線,支援inner、left、right和outer4種連線方式,但只能實現SQL中的等值連線

join,語法和功能與merge一致,不同的是merge既可以用pandas介面呼叫,也可以用dataframe物件介面呼叫,而join則只適用於dataframe物件介面

append,concat執行axis=0時的一個簡化介面,類似列表的append函式一樣

實際上,concat通過設定axis=1也可實現與merge類似的效果,二者的區別在於:merge允許連線欄位重複,類似一對多或者多對一連線,此時將產生笛卡爾積結果;而concat則不允許重複,僅能一對一拼接。

標籤: pandas
  • 文章版權屬於文章作者所有,轉載請註明 https://shqsg.com/dianzi/kq0z0y.html