Pandas 是 Python 中常用的資料分析函式庫,其核心資料結構 Series 和 DataFrame 提供了便捷的資料操作功能。在實際應用中,我們經常需要根據資料特性自訂索引,以便更直觀地理解和操作資料。此外,瞭解如何檢視 Pandas 物件的屬性,例如資料型別、形狀等,對於有效地進行資料分析至關重要。這能幫助我們快速掌握資料的結構和特性,進而選擇合適的分析方法。熟練掌握這些技巧,能大幅提升資料處理效率,是資料科學工作中不可或缺的技能。

Jupyter Notebook 安裝與使用

在開始使用 Jupyter Notebook 進行 Python 開發之前,首先需要正確安裝並啟動該環境。本章節將引導讀者完成安裝、啟動及基本操作。

安裝與啟動 Jupyter Notebook

  1. 啟動 Jupyter Notebook:安裝完成後,開啟命令提示字元(Windows)或終端機(Mac/Linux),輸入以下命令以啟動 Jupyter Notebook:

    jupyter notebook
    

    這個命令不一定要在使用者主目錄下執行,可以在任何位置執行,瀏覽器中的內容將反映該位置。

  2. 建立新筆記本:在 Jupyter Notebook 首頁的右側點選「New」按鈕,會彈出可用的 kernel 列表。對於新安裝的環境,通常只會看到「Python 3」選項。選擇「Python 3」後,將在瀏覽器中開啟一個新分頁,可開始編寫 Python 程式碼。

  3. 開啟現有筆記本:除了建立新的筆記本,也可以開啟之前建立的檔案。透過 Jupyter Notebook 瀏覽器首頁提供的檔案系統導航,選取所需的 .ipynb 檔案即可開啟。

替代方案:雲端筆記本環境

若不想在本機安裝 Jupyter Notebook,也可使用雲端服務。Google 和 Microsoft 均提供免費的筆記本環境,並且預先載入了 pandas 函式庫。

本文使用的慣例

  • 程式碼內文:文中出現的程式碼、資料函式庫表名、資料夾名稱、檔案名稱、副檔名、路徑名稱、虛擬 URL、使用者輸入及社群帳號等,均以特定格式標示。例如:「可能需要安裝 xlwtopenpyxl 以寫入 XLS 或 XLSX 檔案。」

  • 程式碼區塊:程式碼範例如下:

    import pandas as pd
    import numpy as np
    movies = pd.read_csv("data/movie.csv")
    movies
    
  • 重要字詞:畫面上的重要字詞或按鈕以粗體標示,例如:「在管理面板中選擇 System info。」

  • 術語:文中具有特殊意義或重要性的術語以斜體表示。

每個範例的假設條件

在每個範例開始時,預設已將 pandas、NumPy、PyArrow 和 Matplotlib 載入名稱空間:

import numpy as np
import pyarrow as pa
import pandas as pd

內容解密:

此段程式碼匯入了必要的函式庫,分別是 NumPy 用於數值運算、PyArrow 用於高效資料處理,以及 pandas 用於資料分析。

資料集描述

本文使用了約二十多個資料集。詳細的資料集描述,包括欄位資訊及資料來源說明,可參考 GitHub 上的 dataset_descriptions Jupyter Notebook 檔案。

章節結構

本文包含多個常見的章節標題,用於清晰指導讀者完成每個範例。

  1. 如何執行:提供遵循範例的步驟。
  2. 運作原理:詳細解釋前一步驟中發生的過程。
  3. 更多資訊:提供額外的知識,使讀者對範例有更深入的瞭解。

回饋與支援

歡迎讀者提供任何形式的回饋。對於本文的任何疑問,請將書名置於郵件主旨中,寄送至 customercare@packtpub.com

如何取得更多資源

留下您的評價

感謝您購買 Packt Publishing 的書籍,希望您能喜歡!您的回饋對我們極為寶貴,能幫助我們改進與成長。閱讀完畢後,請花一分鐘時間在 Amazon 上留下您的評價。詳細步驟如下:

  1. 前往 評價連結
  2. 簡單填寫您的評價

掃描下方 QR Code,即可獲得免費電子書一本: https://packt.link/free-ebook/9781836205876

圖表翻譯:

此 QR Code 用於讀者取得免費電子書資源,需掃描並依照指示操作。

pandas基礎介紹

pandas函式庫對於處理結構化資料非常有用。什麼是結構化資料?儲存在表格中的資料,如CSV檔案、Excel試算表或資料函式庫表格,都屬於結構化資料。非結構化資料則包含自由格式的文字、圖片、聲音或影片。如果你經常處理結構化資料,pandas將成為你的得力助手。

pandas中的主要物件

pd.Series

pd.Series是一維的資料集合,類別似於Excel中的一欄。與資料函式庫中的欄位一樣,pd.Series中的所有值都必須具有相同的資料型別。

pd.DataFrame

pd.DataFrame是二維的物件,可以視為多個pd.Series物件的集合。每個pd.Series可以有不同的資料型別,因此pd.DataFrame可以儲存多種不同型別的資料。

pd.Index

pd.Index在其他工具中沒有直接對應的物件。它可以用於選擇值、合併表格等操作。

建立pandas物件

本章節將介紹如何手動建立pd.Seriespd.DataFrame物件,自訂與它們相關聯的pd.Index物件,並展示在分析過程中可能需要檢查的pd.Seriespd.DataFrame的常見屬性。

匯入pandas

大多數pandas使用者會使用匯入別名,將其稱為pd

import pandas as pd
import numpy as np
import pyarrow as pa

建立pd.Series

建立pd.Series最簡單的方法是提供一個值序列,例如整數列表:

pd.Series([0, 1, 2])

輸出結果:

0    0
1    1
2    2
dtype: int64

內容解密:

  • pd.Series([0, 1, 2])建立了一個包含三個整數的序列。
  • pandas自動推斷資料型別為int64

你也可以使用元組(tuple)作為輸入:

pd.Series((12.34, 56.78, 91.01))

輸出結果:

0    12.34
1    56.78
2    91.01
dtype: float64

內容解密:

  • 使用元組作為輸入,同樣可以建立pd.Series
  • 資料型別被推斷為float64,因為輸入值包含小數。

使用Python的range函式生成範例資料:

pd.Series(range(0, 7, 2))

輸出結果:

0    0
1    2
2    4
3    6
dtype: int64

內容解密:

  • range(0, 7, 2)生成一個從0到6的整數序列,步長為2。
  • pd.Series將這個序列轉換為一個具有對應索引的序列。

你可以明確指定資料型別,以節省記憶體或確保與其他系統的相容性:

pd.Series(range(3), dtype="int8")

輸出結果:

0    0
1    1
2    2
dtype: int8

內容解密:

  • 明確指定資料型別為int8,表示使用8位元整數儲存資料。
  • 這樣可以減少記憶體使用量。

建立pd.DataFrame

建立pd.DataFrame最基本的方法是提供一個二維序列,例如列表的列表:

pd.DataFrame([
    [0, 1, 2],
    [3, 4, 5],
    [6, 7, 8],
])

輸出結果:

   0  1  2
0  0  1  2
1  3  4  5
2  6  7  8

圖表翻譯:

以下Mermaid圖表呈現了DataFrame的結構:

  graph LR;
    A[行索引] --> B[列0];
    A --> C[列1];
    A --> D[列2];
    B --> E[值0];
    B --> F[值1];
    B --> G[值2];
    C --> H[值3];
    C --> I[值4];
    C --> J[值5];
    D --> K[值6];
    D --> L[值7];
    D --> M[值8];

圖表翻譯: 此圖示呈現了DataFrame的行索引與列之間的關係,每個儲存格中包含對應的值。

你也可以使用字典來建立pd.DataFrame,字典的鍵將成為欄位名稱:

pd.DataFrame({
    "first_name": ["Jane", "John"],
    "last_name": ["Doe", "Smith"],
})

輸出結果:

  first_name last_name
0       Jane       Doe
1       John     Smith

圖表翻譯:

以下Mermaid圖表呈現了使用字典建立DataFrame的過程:

  graph LR;
    A[字典] --> B[key: first_name];
    A --> C[key: last_name];
    B --> D[value: Jane];
    B --> E[value: John];
    C --> F[value: Doe];
    C --> G[value: Smith];
    D --> H[DataFrame];
    E --> H;
    F --> H;
    G --> H;

圖表翻譯: 此圖示呈現瞭如何使用字典的鍵值對應建立DataFrame,其中鍵成為欄位名稱,而值則填充到對應的欄位中。

你還可以使用多個pd.Series來建立一個pd.DataFrame

ser1 = pd.Series(range(3), dtype="int8", name="int8_col")
ser2 = pd.Series(range(3), dtype="int16", name="int16_col")
pd.DataFrame({ser1.name: ser1, ser2.name: ser2})

輸出結果:

   int8_col  int16_col
0         0         0
1         1         1
2         2         2

圖表翻譯:

以下Mermaid圖表呈現了使用多個Series建立DataFrame的過程:

  graph LR;
    A[Series1] --> B[DataFrame];
    C[Series2] --> B;
    B --> D[int8_col];
    B --> E[int16_col];

圖表翻譯: 此圖示呈現瞭如何將多個Series合併成一個DataFrame,每個Series成為DataFrame中的一欄。

pandas 資料結構基礎:自訂索引與屬性檢視

在 pandas 中,建立 pd.Seriespd.DataFrame 物件時,預設會自動生成一個從 0 開始的整數索引(pd.RangeIndex)。然而,在實際應用中,我們通常需要自訂索引以提高資料的可讀性。本文將介紹如何自訂 pd.Seriespd.DataFrame 的索引,以及如何檢視其屬性。

自訂 pd.Series 索引

建立 pd.Series 時,可以透過 index= 引數自訂索引標籤。例如:

pd.Series([4, 4, 2], index=["dog", "cat", "human"])

輸出結果:

dog      4
cat      4
human    2
dtype: int64

內容解密:

  1. pd.Series([4, 4, 2], index=["dog", "cat", "human"]) 建立了一個 pd.Series 物件,包含三個元素。
  2. index=["dog", "cat", "human"] 自訂了索引標籤,分別對應三個元素。
  3. 輸出結果顯示了自訂索引後的 pd.Series,資料型別為 int64

若需要更精細的控制,可以先建立 pd.Index 物件,再將其傳遞給 index= 引數:

index = pd.Index(["dog", "cat", "human"], name="animal")
pd.Series([4, 4, 2], name="num_legs", index=index)

輸出結果:

animal
dog      4
cat      4
human    2
Name: num_legs, dtype: int64

內容解密:

  1. index = pd.Index(["dog", "cat", "human"], name="animal") 建立了一個名為 “animal” 的 pd.Index 物件。
  2. pd.Series([4, 4, 2], name="num_legs", index=index) 建立了一個名為 “num_legs” 的 pd.Series 物件,並使用自訂的 pd.Index
  3. 輸出結果顯示了具有自訂索引和名稱的 pd.Series

自訂 pd.DataFrame 索引

建立 pd.DataFrame 時,可以同時自訂列索引和欄位索引:

pd.DataFrame([
    [24, 180],
    [42, 166],
], columns=["age", "height_cm"], index=["Jack", "Jill"])

輸出結果:

      age  height_cm
Jack   24        180
Jill   42        166

內容解密:

  1. pd.DataFrame([...]) 建立了一個 pd.DataFrame 物件,包含兩個列和兩個欄位。
  2. columns=["age", "height_cm"] 自訂了欄位索引,分別對應兩個欄位。
  3. index=["Jack", "Jill"] 自訂了列索引,分別對應兩個列。
  4. 輸出結果顯示了具有自訂索引的 pd.DataFrame

檢視 pd.Series 和 pd.DataFrame 的屬性

一旦建立了 pd.Seriespd.DataFrame,就可以檢視其各種屬性。例如:

  • dtypedtypes:檢視資料型別。
  • name:檢視 pd.Series 的名稱。
  • index:檢視列索引。
  • columns:檢視欄位索引(僅適用於 pd.DataFrame)。
  • shape:檢視形狀(列數和欄位數)。
  • size:檢視元素總數。

範例如下:

ser = pd.Series([4, 4, 2], name="num_legs", index=pd.Index(["dog", "cat", "human"], name="animal"))
print(ser.dtype)       # 輸出:int64
print(ser.name)        # 輸出:num_legs
print(ser.index)       # 輸出:Index(['dog', 'cat', 'human'], dtype='object', name='animal')
print(ser.shape)       # 輸出:(3,)
print(ser.size)        # 輸出:3

df = pd.DataFrame([
    [24, 180, "red"],
    [42, 166, "blue"],
], columns=["age", "height_cm", "favorite_color"], index=pd.Index(["Jack", "Jill"], name="person"))
print(df.dtypes)       # 輸出各欄位的資料型別
print(df.index)        # 輸出:Index(['Jack', 'Jill'], dtype='object', name='person')
print(df.columns)      # 輸出:Index(['age', 'height_cm', 'favorite_color'], dtype='object')
print(df.shape)        # 輸出:(2, 3)
print(df.size)         # 輸出:6

圖表說明

  graph LR;
    A[建立 pd.Series 或 pd.DataFrame] --> B[自訂索引];
    B --> C[檢視屬性];
    C --> D[dtype 或 dtypes];
    C --> E[name];
    C --> F[index];
    C --> G[columns];
    C --> H[shape];
    C --> I[size];

圖表翻譯: 此圖表展示了使用 pandas 的基本流程。首先,建立 pd.Seriespd.DataFrame 物件。接著,可以自訂索引以提高資料的可讀性。最後,檢視物件的各種屬性,例如資料型別、名稱、索引、形狀和元素總數等。透過這些步驟,可以更好地理解和操作資料。