1. 程式人生 > >pandas的行列名更改與資料選擇

pandas的行列名更改與資料選擇

    記錄一些pandas選擇資料的內容,此前首先說行列名的獲取和更改,以方便獲取資料。此文作為學習鞏固。

這篇博的內容順序大概就是: 行列名的獲取 —> 行列名的更改 —> 資料選擇

一、pandas的行列名獲取和更改

1. 獲取:   df.index()    df.columns()

  • 首先,舉個例子,做一個DataFrame如下:
>>>import pandas as pd
>>>import numpy as np
>>>data = pd.DataFrame({'a':[1,2,3],'b':[4,5,6],'c':[7,8,9]})
>>>data

       

  • 設定了列索引為 abc,行索引是自動生成的,也可以設定
>>>data.index = ['A','B','C']
>>>data

      

以下的做法都以這個 data 作為資料舉例

  • 接下來就可以獲取索引了,index-行索引,columns-列索引
>>>data.index

    

>>>data.columns

    

2. 修改,看到有很多方法,這裡推薦一種比較靈活好用的方法    

   df.rename(index={ }, columns={ }, inplace=True)

>>>data.rename(index={'A':'D', 'B':'E', 'C':'F'}, columns={'a':'d', 'b':'e', 'c':'f'}, inplace = True)
>>>data

    

  • 說明3點:

    1. index和columns無關,可以分別指定,也就是說,可以只修改行索引,那麼rename()中只寫index

    2. 索引可以任意挑選,如此處,index={'A':'D', 'C':'F'} 則只改A和C,columns同樣

    3. inplace=True, 在原dataframe上改動 

二、pandas的資料選擇

1. 直接用索引選(不靈活、不推薦)   df[ ]

1) 選擇‘a’列

>>>data['a']        

    

注意:1. 這樣取出的資料型別為 Series

         2. 這種方法只能取出一列,不能用數字下標,不能多選或片選,  data['a','b'] 

data['a':'c']  data[0]

2)選擇'A','B'行

>>>data['A':'B']  
>>>data[0:2]      # 兩種方法同一結果

    

注意:1. 這樣取出的資料型別為 DateFrame

         2. 這種方法只能用於片選行,可以用數字下標,不能單獨取,即 data['A']  data['A','B']  , data[1]

2.使用 .loc(推薦)  df.loc(),()內參數先行後列,區別行列的取法

1) 取列:

>>>data.loc[:,['a','c']]     #圖1 需要行全取,再對應指定列

2)取行:

>>>data.loc[['A','B']]     #圖2 直接指定行

3)取行列交叉值:

>>>data.loc[['A'],['b','c']]  #圖3 

    (1)                 (2)                 (3)

注意:

1. 區別 df.iloc()      .loc() —— 使用標籤 label 作為索引取值

                          .iloc() —— 使用整數下標 index 作為索引取值,如上面三句可以換成以下三

                                           句,輸出資料型別有不同

>>>data.iloc[:,[0,2]]    # DataFrame
>>>data.iloc[[0,1]]      # DataFrame
>>>data.iloc[0,[1,2]]    # Series

2. 對於 數字型別的變數,可以使用bool 選取行,列不能用bool,如

>>>data.loc[data.b>5]   # DataFrame

    

>>>data.loc[data.b>5,['c']]   #DataFrame  輸出為9位置的frame
>>>data.iloc[data.b.values>5,[2]]  #DataFrame  輸出同上,需要有 .values取值

3. .ix[ ] 可以混用label和index,位置使用同 .loc[ ]  .iloc[ ]