Python的pandas包的學習

一:pandas的數據類型html

  pandas中最重要的數據類型是Series序列 和 DataFrame數據框,Series至關於Numpy中的一維數組,不一樣之處series會自帶索引值。dataframe至關於numpy的二維數組。python

  1.1)Series的建立---有兩種方式:經過一維數組 和 字典數據庫

    1)經過一維數組建立序列數組

      

      OUT:app

      

    2)經過字典建立序列dom

      

     OUT:函數

      

    3)經過DataFrame的某一行或某一列建立序列學習

  2.2)建立DataFramespa

    1) 經過二維數組建立3d

      

      OUT:

      

    2)經過字典列表建立

      

      OUT:

      

    3)經過嵌套字典

      

     OUT:

      

    4)經過dataframe建立dataframe

      

      OUT:

      

二:數據索引Index

    2.1)  獲取Series序列的數據----若是沒有給序列指定索引,那麼就建立一個從0開始自增的序列,df.index來獲取索引值,或經過df.index來指定索引值

      series序列是一維數組,能夠經過索引切片來獲取數據

    2.2)獲取DataFrame的數據

        1)獲取列數據-- df[列名] 或 使用點運算符 df.列名

        2)獲取行數據

            a) df.iloc[索引值]  (只適用於數字標籤的索引)

            b) df.loc[ ' '] , 適用於索引是字符串標籤

            c) df.ix[' ' ] , 主要用於字符串標籤的索引,也可做爲數字索引的備選

    2.3) 自動化對齊

      對pandas的series序列進行運算時,有相同的索引值上進行運算,索引值不一樣就進行自動補齊

三:查詢數據

  引入數據集

    df = pf.read_csv( '文件路徑名' , header = None)  (header 表示返回的數據是否有別名)

          student = pd.read_csv(' ')          

  查詢前幾行 或 後幾行 

    student.head(5 ) 

    student.tail(5)

  查詢指定的行

    student.ix[ ] # 索引是字符串或數字,多行索引必須使用兩個中括號student.ix[[  ]]

    student.loc[ ] # 索引字符串

    student.iloc[ ] # 索引數字

  查詢指定的列

    student[列名] 或 student.列名 

    查詢多個列 student [['Name' , 'Height' , 'Weight']]

  經過ix查詢指定的列

    student [:,['Name' , 'Height' , 'Weight']]

  查詢指定的行和列

    student [[0,2,4],['Name' , 'Height' , 'Weight']]

  下面經過布爾索引來實現特定信息的查詢

  student[student['sex'] == F] ---  查詢全部性別爲女生的信息

  student[(student['sex'] == F) & (stuent['age'] > 18)] -- 多條件查詢,查詢全部性別爲女且年齡大於18歲的信息

  student[(student['sex'] == F) & (stuent['age'] > 18)] [['name' , 'height']] --查詢性別爲女,年齡大於18的學生的姓名 和 體重

 四:統計分析     

    pandas模塊爲咱們提供了很是多的描述性統計分析的指標函數,如總和、均值、最小值、最大值等,咱們來具體看看這些函數:
首先隨機生成三組數據

  1. np.random.seed(1234)
  2. d1 = pd.Series(2*np.random.normal(size = 100)+3)
  3. d2 = np.random.f(2,4,size = 100)
  4. d3 = np.random.randint(1,100,size = 100)
  5. d1.count()  #非空元素計算
  6. d1.min()  #最小值
  7. d1.max()  #最大值
  8. d1.idxmin() #最小值的位置,相似於R中的which.min函數
  9. d1.idxmax() #最大值的位置,相似於R中的which.max函數
  10. d1.quantile(0.1)  #10%分位數
  11. d1.sum()  #求和
  12. d1.mean()  #均值
  13. d1.median() #中位數
  14. d1.mode()  #衆數
  15. d1.var()  #方差
  16. d1.std()  #標準差
  17. d1.mad()  #平均絕對誤差
  18. d1.skew()  #偏度
  19. d1.kurt()  #峯度
  20. d1.describe()  #一次性輸出多個描述性統計指標

在實際的工做中,咱們可能須要處理的是一系列的數值型數據框,如何將這個函數應用到數據框中的每一列呢?可使用apply函數,這個很是相似於R中的apply的應用方法。
將以前建立的d1,d2,d3數據構建數據框:

  1. df = pd.DataFrame(np.array([d1,d2,d3]).T,columns=['x1','x2','x3'])
  2. df.head()
  3. df.apply(stats)

很是完美,就這樣很簡單的建立了數值型數據的統計性描述。若是是離散型數據呢?就不能用這個統計口徑了,咱們須要統計離散變量的觀測數、惟一值個數、衆數水平及個數。你只須要使用describe方法就能夠實現這樣的統計了。

  1. student['Sex'].describe()

除以上的簡單描述性統計以外,還提供了連續變量的相關係數(corr)和協方差矩陣(cov)的求解,這個跟R語言是一致的用法。

  1. df.corr()

關於相關係數的計算能夠調用pearson方法或kendell方法或spearman方法,默認使用pearson方法。

  1. df.corr('spearman')

若是隻想關注某一個變量與其他變量的相關係數的話,可使用corrwith,以下方只關心x1與其他變量的相關係數:

  1. df.corrwith(df['x1'])

數值型變量間的協方差矩陣

    1. df.cov()

五:相似於SQL的操做

  5.1)增長新行或新列

    

    OUT:

    

    雖然d2數據框只有3行1列,d3通過concat方法後,變成6行4列,d3的行數=d1的行數+d2的行數,d3的列數=d1的列數+d2的列數

    新增一列--- 爲不存在的列賦值會建立新列,如 d1['four'] = 11 

  5.2) 刪除

    1)刪除數據框 --- del d1

    2) 刪除指定的行 ---d1.drop(['a' , 'b'] ) ,刪除 d1數據框索引值爲a和b的數據 

    3) 刪除指定的列  ---  d1.drop('one' , 'two' ,axis =1) ,經過指定axis的值來代表是刪除列仍是行,axis默認值是0,0爲行,1爲列

    4)布爾索引對數據框的查詢,實際上也是刪除數據操做,返回知足條件的數據

  5.3)改,修改數據中的值

     

  5.4)查,重點講解聚合、排序、多表連接操做

    1)group by 聚合函數

      若是不對聚合函數作限制的話,group by會對數值型數據進行聚合計算,如students數據框,有name,height,weight,sex,age列,name列是字符串,因此不會進行計算.

      

      經過drop刪除該變量

       

      groupby還能夠設置多個分組變量,例如對年齡和性別分組,來計算年齡和身高的平均值

        

      還能夠對每一個分組進行多個統計量的計算,經過agg([ , ,])

         

    2) 排序

        在平常的統計工做中,排序是很重要的,能夠經過order , sort_index,sort_values實現序列和數據框的排序操做

        1:order

          s1 = dp.Series(np.array(np.random.randint(1,20,10)))        

                

    3) 多表鏈接

     多表之間的鏈接也是很是常見的數據庫操做,鏈接份內鏈接和外鏈接,在數據庫語言中經過join關鍵字實現,pandas我比較建議使用merger函數實現數據的各類鏈接操做。
     以下是構造一張學生的成績表

     

      如今想把學生表student與學生成績表score作一個關聯,該如何操做呢?

      

      注意,默認狀況下,merge函數實現的是兩個表之間的內鏈接,即返回兩張表中共同部分的數據。能夠經過how參數設置鏈接的方式,left爲左鏈接;right爲右鏈接;outer爲外鏈接。

      

       左鏈接實現的是保留student表中的全部信息,同時將score表的信息與之配對,能配多少配多少,對於沒有配對上的Name,將會顯示成績爲NaN。

六:缺失值處理

  現實生活中的數據是很是雜亂的,其中缺失值也是很是常見的,對於缺失值的存在可能會影響到後期的數據分析或挖掘工做,那麼咱們該如何處理這些缺失值呢?經常使用的有三大類方法,即刪除法、填補法和插值法。

刪除法:當數據中的某個變量大部分值都是缺失值,能夠考慮刪除改變量;當缺失值是隨機分佈的,且缺失的數量並非不少是,也能夠刪除這些缺失的觀測。
替補法:對於連續型變量,若是變量的分佈近似或就是正態分佈的話,能夠用均值替代那些缺失值;若是變量是有偏的,可使用中位數來代替那些缺失值;對於離散型變量,咱們通常用衆數去替換那些存在缺失的觀測。
插補法:插補法是基於蒙特卡洛模擬法,結合線性模型、廣義線性模型、決策樹等方法計算出來的預測值替換缺失值。

咱們這裏就介紹簡單的刪除法和替補法

      

      

這是一組含有缺失值的序列,咱們能夠結合sum函數和isnull函數來檢測數據中含有多少缺失值:

  1. In [130]: sum(pd.isnull(s))
  2. Out[130]: 9

直接刪除缺失值

    

  默認狀況下,dropna會刪除任何含有缺失值的行,咱們再構造一個數據框試試:

    

    返回結果代表,數據中只要含有缺失值NaN,該數據行就會被刪除,若是使用參數how=’all’,則代表只刪除全部行爲缺失值的觀測。

      

    使用一個常量來填補缺失值,可使用fillna函數實現簡單的填補工做:
      1)用0填補全部缺失值

      

      2)採用前項填充或後向填充

      

      3)使用常量填充不一樣的列

      

      4)用均值或中位數填充各自的列

       

      很顯然,在使用填充法時,相對於常數填充或前項、後項填充,使用各列的衆數、均值或中位數填充要更加合理一點,這也是工做中經常使用的一個快捷手段。

七:數據透視表

   

在Excel中有一個很是強大的功能就是數據透視表,經過托拉拽的方式能夠迅速的查看數據的聚合狀況,這裏的聚合能夠是計數、求和、均值、標準差等。
pandas爲咱們提供了很是強大的函數pivot_table(),該函數就是實現數據透視表功能的。對於上面所說的一些聚合函數,能夠經過參數aggfunc設定。咱們先看看這個函數的語法和參數吧:

  1. pivot_table(data,values=None,
  2. index=None,
  3. columns=None,
  4. aggfunc='mean',
  5. fill_value=None,
  6. margins=False,
  7. dropna=True,
  8. margins_name='All')
  9. data:須要進行數據透視表操做的數據框
  10. values:指定須要聚合的字段
  11. index:指定某些原始變量做爲行索引
  12. columns:指定哪些離散的分組變量
  13. aggfunc:指定相應的聚合函數
  14. fill_value:使用一個常數替代缺失值,默認不替換
  15. margins:是否進行行或列的彙總,默認不彙總
  16. dropna:默認全部觀測爲缺失的列
  17. margins_name:默認行彙總或列彙總的名稱爲'All'

咱們仍然以student表爲例,來認識一下數據透視表pivot_table函數的用法:
對一個分組變量(Sex),一個數值變量(Height)做統計彙總

對一個分組變量(Sex),兩個數值變量(Height,Weight)做統計彙總

對兩個分組變量(Sex,Age),兩個數值變量(Height,Weight)做統計彙總

很顯然這樣的結果並不像Excel中預期的那樣,該如何變成列聯表的形式的?很簡單,只需將結果進行非堆疊操做(unstack)便可:

看,這樣的結果是否是比上面那種看起來更舒服一點?

使用多個聚合函數

有關更多數據透視表的操做,可參考《Pandas透視表(pivot_table)詳解》一文,連接地址:http://python.jobbole.com/81212/

8、多層索引的使用

最後咱們再來說講pandas中的一個重要功能,那就是多層索引。在序列中它能夠實如今一個軸上擁有多個索引,就相似於Excel中常見的這種形式:

對於這樣的數據格式有什麼好處呢?pandas能夠幫咱們實現用低維度形式處理高維數數據,這裏舉個例子也許你就能明白了:

對於這種多層次索引的序列,取數據就顯得很是簡單了:

對於這種多層次索引的序列,咱們還能夠很是方便的將其轉換爲數據框的形式:

以上針對的是序列的多層次索引,數據框也一樣有多層次的索引,並且每條軸上均可以有這樣的索引,就相似於Excel中常見的這種形式:

咱們不妨構造一個相似的高維數據框:

一樣,數據框中的多層索引也能夠很是便捷的取出大塊數據:

在數據框中使用多層索引,能夠將整個數據集控制在二維表結構中,這對於數據重塑和基於分組的操做(如數據透視表的生成)比較有幫助。
就拿student二維數據框爲例,咱們構造一個多層索引數據集:

講到這裏,咱們關於pandas模塊的學習基本完成,其實在掌握了pandas這8個主要的應用方法就能夠靈活的解決不少工做中的數據處理、統計分析等任務。有關更多的pandas介紹,可參考pandas官方文檔:http://pandas.pydata.org/pandas-docs/version/0.17.0/whatsnew.html。                                                                         

相關文章
相關標籤/搜索