pandas 是python的數據分析庫,提供快速、靈活和富有表現力的數據結構,用於數據挖掘和數據分析,同時也提供數據清洗功能,與numpy、matplotlib並稱,成為數據分析必學的三個庫。Pandas的主要功能如下。
此外,其更廣泛的目標是成為任何語言中可用的最強大,最靈活的開源數據分析工具。其中最常用的數據結構是DataFrame,本文將詳細介紹DataFrame的用法。
Dataframe是pandas中的數據結構,也是帶標籤的、大小可變的,二維異構表格。
它類似於電子表格,可以在列中存儲不同類型的數據(包括字符,整數,浮點值,分類數據等),Dataframe中的數據以一個或多個二維塊存放,不是列表、字典或一維數組結構。
一、創建
由數組/list組成的字典創建Dataframe,columns為字典key,index為默認數字標籤,字典的值的長度必須保持一致!
通過二維數組直接創建Dataframe,得到一樣形狀的結果數據,如果不指定index和columns,兩者均返回默認數字格式
index和colunms指定長度與原數組保持一致
由字典組成的列表創建Dataframe,可以允許長度不一致,columns為字典的key,index不做指定則為默認數組標籤
colunms和index參數分別重新指定相應列及行標籤
二、DataFrame索引
df[]默認選擇列,[]中寫列名,選擇單列為Series,print結果為Series格式,多選列為Dataframe,print結果為Dataframe格式
一般用於選擇列,也可以選擇行
注意:反向截取是-1結束,不是0,末端不包含
2、df.loc[] - 按index選擇行
3、df.iloc[] - 按照整數位置(從軸的0到length-1)選擇行類似list的索引,其順序就是dataframe的整數位置,從0開始計
4、切片索引
5、布爾索引
多行做判斷,索引結果保留所有數據:True返回原數據,False返回值為NaN
6、多重索引
三、DataFrame基本技巧
1、數據查看、轉置
要在dataframe最後新增列,直接在後面加一個[],在具體位置新增列用df.insert(index, obj)方法;新增行直接用loc。
4、DataFrame對象之間的數據自動按照列和索引(行標籤)對齊
排序包括按值排序和按索引排序,按值排序 .sort_values,ascending參數:設置升序降序,默認升序
按索引排序 .sort_index
1、數值計算
Dataframe可以用來進行常用的數學的計算,例如:
1、數據清洗
Dataframe的數據清洗包含重複值、缺失值、異常值等等的清洗
subset對應的值是列名,表示只考慮這兩列,將這兩列對應值相同的行進行去重。默認值為subset=None表示考慮所有列。keep='first'表示保留第一次出現的重複行,是默認值。keep另外兩個取值為"last"和False,分別表示保留最後一次出現的重複行和去除所有重複行。
缺失值清洗最簡單的方法就是刪除或不管,插補的方法有單一值填充、拉格朗日插值法、多重插補法以及各種機器學習插補法等等,缺失值和異常值清洗方法具體可見python數據預處理之異常值、缺失值處理方法
數據合併包括四種方法,merge、join、concat和append
l pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=('_x', '_y'), copy=True, indicator=False)
類似於sql中的join,僅支持橫向拼接,其中on關鍵字為拼接參考鍵,how為拼接方式,有inner,left,right,outer4種連結方式。
l df1.join(df2) 直接通過索引連結
l pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False,
copy=True)
可以進行橫向和縱向連接,默認axis=0,行+行,但要求非拼接軸標籤唯一,例如axis=0時,要求每個dataframe內部的列名是唯一的,只有相同列名才有拼接的意義。
l append,類似於列表的append方法,一般用來增加行
數據轉換一般用map和apply,map主要用於Series的轉換,apply是series和dataframe都可以。
Dataframe運用apply可以將各行和各列的函數運用到一維數組上,默認情況下會以列為單位,分別對列應用函數。如果想要將函數應用到每一個元素,需要用到applymap
1、統計基礎
Dataframe也擁有基本的統計功能,具體如下:
Dataframe在行(axis=0)或列(axis=1)上進行分組,將一個函數應用到各個分組並產生一個新值,然後函數執行結果被合併到最終的結果對象中。
l groupby 類似sql的group by功能,直接分組得到一個groupby對象,是一個中間數據,沒有進行計算,所以一定要加上集合函數,複雜的聚合函數可借用agg,功能更強大。
df.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)
常用的聚合函數如下:
l 數據透視表pivot_table
類似於excel中的數據透視功能,可以通過一個或多個鍵分組聚合DataFrame中的數據,通過aggfunc參數決定聚合類型,是groupby的高級功能。
l 交叉表crosstab
默認情況下,crosstab是用來計算因子的頻率表,透視表是一種進行分組統計的函數,而交叉表是特殊的透視表,當只統計分組頻率時更方便。
數據透視表和交叉表的具體用法,可見pd.pivot_table數據透視表與pd.crosstab交叉表
Dataframe的常見用法就是這些,當然還可以通過plot來調用matplotlib進行數據可視化,不過主要還是要依賴matplotlib。