Pandas 是 Python 中常用的資料分析函式庫,其核心資料結構 Series 和 DataFrame 提供了便捷的資料操作功能。在實際應用中,我們經常需要根據資料特性自訂索引,以便更直觀地理解和操作資料。此外,瞭解如何檢視 Pandas 物件的屬性,例如資料型別、形狀等,對於有效地進行資料分析至關重要。這能幫助我們快速掌握資料的結構和特性,進而選擇合適的分析方法。熟練掌握這些技巧,能大幅提升資料處理效率,是資料科學工作中不可或缺的技能。
Jupyter Notebook 安裝與使用
在開始使用 Jupyter Notebook 進行 Python 開發之前,首先需要正確安裝並啟動該環境。本章節將引導讀者完成安裝、啟動及基本操作。
安裝與啟動 Jupyter Notebook
啟動 Jupyter Notebook:安裝完成後,開啟命令提示字元(Windows)或終端機(Mac/Linux),輸入以下命令以啟動 Jupyter Notebook:
jupyter notebook
這個命令不一定要在使用者主目錄下執行,可以在任何位置執行,瀏覽器中的內容將反映該位置。
建立新筆記本:在 Jupyter Notebook 首頁的右側點選「New」按鈕,會彈出可用的 kernel 列表。對於新安裝的環境,通常只會看到「Python 3」選項。選擇「Python 3」後,將在瀏覽器中開啟一個新分頁,可開始編寫 Python 程式碼。
開啟現有筆記本:除了建立新的筆記本,也可以開啟之前建立的檔案。透過 Jupyter Notebook 瀏覽器首頁提供的檔案系統導航,選取所需的
.ipynb
檔案即可開啟。
替代方案:雲端筆記本環境
若不想在本機安裝 Jupyter Notebook,也可使用雲端服務。Google 和 Microsoft 均提供免費的筆記本環境,並且預先載入了 pandas 函式庫。
本文使用的慣例
程式碼內文:文中出現的程式碼、資料函式庫表名、資料夾名稱、檔案名稱、副檔名、路徑名稱、虛擬 URL、使用者輸入及社群帳號等,均以特定格式標示。例如:「可能需要安裝
xlwt
或openpyxl
以寫入 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 檔案。
章節結構
本文包含多個常見的章節標題,用於清晰指導讀者完成每個範例。
- 如何執行:提供遵循範例的步驟。
- 運作原理:詳細解釋前一步驟中發生的過程。
- 更多資訊:提供額外的知識,使讀者對範例有更深入的瞭解。
回饋與支援
歡迎讀者提供任何形式的回饋。對於本文的任何疑問,請將書名置於郵件主旨中,寄送至 customercare@packtpub.com
。
如何取得更多資源
- 錯誤回報:若發現書中有誤,請至 Packt Errata Submission Form 回報。
- 成為作者:若您在某一領域具有專業知識,並有意撰寫或貢獻書籍,請存取 Packt 作者專區。
留下您的評價
感謝您購買 Packt Publishing 的書籍,希望您能喜歡!您的回饋對我們極為寶貴,能幫助我們改進與成長。閱讀完畢後,請花一分鐘時間在 Amazon 上留下您的評價。詳細步驟如下:
- 前往 評價連結
- 簡單填寫您的評價
掃描下方 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.Series
和pd.DataFrame
物件,自訂與它們相關聯的pd.Index
物件,並展示在分析過程中可能需要檢查的pd.Series
和pd.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.Series
和 pd.DataFrame
物件時,預設會自動生成一個從 0 開始的整數索引(pd.RangeIndex
)。然而,在實際應用中,我們通常需要自訂索引以提高資料的可讀性。本文將介紹如何自訂 pd.Series
和 pd.DataFrame
的索引,以及如何檢視其屬性。
自訂 pd.Series 索引
建立 pd.Series
時,可以透過 index=
引數自訂索引標籤。例如:
pd.Series([4, 4, 2], index=["dog", "cat", "human"])
輸出結果:
dog 4
cat 4
human 2
dtype: int64
內容解密:
pd.Series([4, 4, 2], index=["dog", "cat", "human"])
建立了一個pd.Series
物件,包含三個元素。index=["dog", "cat", "human"]
自訂了索引標籤,分別對應三個元素。- 輸出結果顯示了自訂索引後的
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
內容解密:
index = pd.Index(["dog", "cat", "human"], name="animal")
建立了一個名為 “animal” 的pd.Index
物件。pd.Series([4, 4, 2], name="num_legs", index=index)
建立了一個名為 “num_legs” 的pd.Series
物件,並使用自訂的pd.Index
。- 輸出結果顯示了具有自訂索引和名稱的
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
內容解密:
pd.DataFrame([...])
建立了一個pd.DataFrame
物件,包含兩個列和兩個欄位。columns=["age", "height_cm"]
自訂了欄位索引,分別對應兩個欄位。index=["Jack", "Jill"]
自訂了列索引,分別對應兩個列。- 輸出結果顯示了具有自訂索引的
pd.DataFrame
。
檢視 pd.Series 和 pd.DataFrame 的屬性
一旦建立了 pd.Series
或 pd.DataFrame
,就可以檢視其各種屬性。例如:
dtype
或dtypes
:檢視資料型別。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.Series
或 pd.DataFrame
物件。接著,可以自訂索引以提高資料的可讀性。最後,檢視物件的各種屬性,例如資料型別、名稱、索引、形狀和元素總數等。透過這些步驟,可以更好地理解和操作資料。