Python Pandas – 常用的資料存取與 iloc, loc 函數

Loading

測試環境為 CentOS 8 (虛擬機)

參考資料 – https://ithelp.ithome.com.tw/articles/10251663

Pandas 二維陣列 (資料類似 Excel 或是 RDBMS 關聯式資料庫) 常用的資料存取與 iloc, loc , ix 函數

安裝所需模組

[root@localhost ~]# pip install pandas

匯入模組

[root@localhost ~]# python3
Python 3.6.8 (default, Sep 10 2021, 09:13:53)
[GCC 8.5.0 20210514 (Red Hat 8.5.0-3)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd

從網路抓的資料大多是 JSON 格式,下面就以此為範例.

>>> data = pd.DataFrame({
    "Chinese":
    {
        "Ben": 68,
        "Alex": 86,
        "Jeff": 57
    },
    "English":
    {
        "Ben": 63,
        "Alex": 92,
        "Jeff": 83
    },
    "Math":
    {
        "Ben": 65,
        "Alex": 89,
        "Jeff": 77
    }
})
>>> data
      Chinese  English  Math
Ben        68       63    65
Alex       86       92    89
Jeff       57       83    77

常用的資料存取

以下是常用取得 DataFrame 資料的方式.

  • 使用欄位名稱取值
    DataFrame[“欄位名稱”]
    >>> data["Chinese"]
    Ben     68
    Alex    86
    Jeff    57
    

    或是

    >>> data.Chinese
    Ben     68
    Alex    86
    Jeff    57
    Name: Chinese, dtype: int64
    

    DataFrame[[“欄位名稱1″,”欄位名稱2”]] , 須注意傳入值須為陣列 [] .

    >>> data[["Chinese","English"]]
          Chinese  English
    Ben        68       63
    Alex       86       92
    Jeff       57       83
    
  • 條件式搜尋
    DataFrame[“欄位名稱”] 條件式

    >>> data["Chinese"] > 60
    Ben      True
    Alex     True
    Jeff    False
    Name: Chinese, dtype: bool
    
    >>> data[data["Chinese"] > 60]
          Chinese  English  Math
    Ben        68       63    65
    Alex       86       92    89
    

    或是

    >>> data[data.Chinese > 60]
          Chinese  English  Math
    Ben        68       63    65
    Alex       86       92    89
    

    多條件時

    >>> data[(data.Chinese > 60) & (data.English>80)]
          Chinese  English  Math
    Alex       86       92    89
    

    如果要找出空值時,需使用 isnull() 函數(回傳 True 為 NULL , False 則非)

    >>> data["Chinese"].isnull()
    Ben     False
    Alex    False
    Jeff    False
    

    可以找出是 null 的資料,我的資料是沒有 null.

    >>> data[data["Chinese"].isnull()]
    Empty DataFrame
    Columns: [Chinese, English, Math]
    Index: []
    
  • DataFrame[“欄位名稱”].values
    DataFrame[“欄位名稱”].values , 回傳值為陣列.

    >>> data["Chinese"].values
    array([68, 86, 57])
    

    DataFrame.values[索引位置]

    >>> data.values[1]
    array([86, 92, 89])
    >>> data.values[2]
    array([57, 83, 77])
    >>> data.values[0]
    array([68, 63, 65])
    
  • DataFrame.columns
    DataFrame.columns 看欄位名稱

    >>> data.columns
    Index(['Chinese', 'English', 'Math'], dtype='object')
    
  • DataFrame.index
    DataFrame.index 看 index

    >>> data.index
    Index(['Ben', 'Alex', 'Jeff'], dtype='object')
    

iloc, loc , ix 函數

  • loc 使用名稱取值

    DataFrame.loc[“索引名稱”, “欄位名稱”]

    只指定 索引名稱

    >>> data.loc["Ben"]
    Chinese    68
    English    63
    Math       65
    Name: Ben, dtype: int64
    

    指定 索引名稱+欄位名稱

    >>> data.loc["Ben","Chinese"]
    68
    

    可用 : 表示全部.

    >>> data.loc[:,:]
          Chinese  English  Math
    Ben        68       63    65
    Alex       86       92    89
    Jeff       57       83    77
    

    指定條件式

    >>> data.loc[data.Chinese > 60, ["Chinese"]]
          Chinese
    Ben        68
    Alex       86
    
    >>> data.loc[data.Chinese > 60, :]
          Chinese  English  Math
    Ben        68       63    65
    Alex       86       92    89
    
  • iloc使用數值取值

    使用數字為 index 來取值. DataFrame.loc[“索引數字”, “欄位數字”]

    索引,欄位數字都是從 0 開始.

    指定索引數字

    >>> data.iloc[0]
    Chinese    68
    English    63
    Math       65
    Name: Ben, dtype: int64
    
    >>> data.iloc[:2]
          Chinese  English  Math
    Ben        68       63    65
    Alex       86       92    89
    

    指定索引與 欄位數字

    >>> data.iloc[:,0]
    Ben     68
    Alex    86
    Jeff    57
    Name: Chinese, dtype: int64
    
    >>> data.iloc[:,:2]
          Chinese  English
    Ben        68       63
    Alex       86       92
    Jeff       57       83
    
    >>> data.iloc[1,1]
    92
    
沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料