開心生活站

位置:首頁 > IT科技 > 

pandas使用教程

IT科技1.34W

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