Pandas 作為 Python 資料分析核心工具,提供 DataFrame 等高效資料結構和豐富操作方法,廣泛應用於資料科學、機器學習等領域。本文從基礎操作到進階應用,深入解析 Pandas 的各項功能,並結合實務案例,逐步引導讀者掌握資料處理技巧。內容涵蓋資料讀取、清洗、轉換、時間序列分析、探索性資料分析以及效能最佳化等導向,也探討與 NumPy、PyArrow 等其他 Python 資料科學工具的整合應用,幫助讀者建構完整的資料分析工作流程。本文同時提供 pandas 基礎概念的說明,例如 Series、DataFrame 和 Index,以及資料選取、指定、資料型別處理等基本操作,適合不同程度的讀者學習。
Pandas Cookbook 第三版:Python 實用資料分析秘笈
Pandas 是 Python 資料分析生態系中的核心工具,提供豐富的功能以支援科學計算、時間序列分析及探索性資料分析。本文結合實務經驗與具體範例,深入解析 Pandas 的強大功能。
為何選擇 Pandas?
在 2008 年,Wes McKinney 開始開發 Pandas 專案,當時 Python 在統計分析與商業分析領域尚未獲得廣泛應用。經過多年的發展,Pandas 已成為資料分析工作者的必備工具。
本文特色
本文由 William Ayd 與 Matthew Harrison 共同編著。William Ayd 是 Pandas 核心維護者,自 2018 年起參與專案開發;而 Matthew Harrison 則是 Python 與資料科學領域的知名作者與培訓師。本文結合兩者的專業知識,提供實用的 Pandas 使用技巧。
核心內容
- Pandas 基礎操作:涵蓋資料讀取、清理、轉換等基本功能。
- 進階資料操作:探討合併、重塑及分組資料的技巧。
- 時間序列分析:介紹如何處理時間序列資料,包括日期與時間的操作。
- 探索性資料分析:利用 Pandas 進行資料視覺化與統計分析。
程式碼實戰
以下是一個簡單的 Pandas 資料讀取範例:
import pandas as pd
# 讀取 CSV 檔案
data = pd.read_csv('data.csv')
# 顯示前五筆資料
print(data.head())
內容解密:
import pandas as pd
:匯入 Pandas 函式庫並簡化名稱為pd
。pd.read_csv('data.csv')
:使用read_csv
方法讀取名為data.csv
的檔案。data.head()
:顯示 DataFrame 的前五列資料,用於快速檢視資料內容。
資料操作範例
假設我們有一個包含銷售資料的 DataFrame,我們可以使用 Pandas 進行資料篩選與彙總:
# 篩選特定條件的資料
filtered_data = data[data['sales'] > 1000]
# 按地區彙總銷售資料
summary = filtered_data.groupby('region')['sales'].sum()
print(summary)
內容解密:
data[data['sales'] > 1000]
:篩選出銷售額超過 1000 的資料列。groupby('region')
:按region
列進行分組。['sales'].sum()
:計算每個地區的銷售總額。
時間序列處理
Pandas 提供強大的時間序列處理功能,以下範例展示如何建立與操作日期範圍:
import pandas as pd
# 建立日期範圍
date_range = pd.date_range(start='2023-01-01', periods=10, freq='D')
print(date_range)
內容解密:
pd.date_range
:建立一個日期範圍。start='2023-01-01'
:設定起始日期。periods=10
:設定生成日期的數量。freq='D'
:設定日期的頻率為每日。
探索性資料分析
利用 Pandas 可以輕鬆進行探索性資料分析,例如計算描述性統計量:
# 計算數值欄位的描述性統計
stats = data.describe()
print(stats)
內容解密:
data.describe()
:自動計算數值欄位的統計資訊,如平均值、標準差等。
本文目標讀者
本文適合以下讀者:
- 需要深入瞭解 Pandas 功能的資料分析師。
- 希望提升 Python 資料處理能力的開發者。
- 對時間序列分析及探索性資料分析感興趣的研究人員。
結語
Pandas Cookbook 第三版提供了豐富的實務範例與深入解析,無論是初學者還是有經驗的使用者,都能從中獲得寶貴的知識與技巧。藉由本文,讀者將能更有效地利用 Pandas 處理各種資料分析任務,並提升工作效率。
pandas 技術深度解析與應用實務
pandas 是 Python 生態系統中最為重要的資料分析函式庫之一,提供高效的資料結構與資料分析工具,廣泛應用於資料科學、機器學習與金融分析等領域。本文將探討 pandas 的核心功能與技術細節,並透過實務案例展示其強大的資料處理能力。
資料結構基礎:Series 與 DataFrame
Series 的基本特性
Series 是 pandas 中的一維標籤化陣列,可視為具有索引的 NumPy 陣列擴充套件。其主要特性包括:
- 索引機制:每個元素都與一個索引對應,支援快速的資料查詢與操作
- 向量化運算:支援高效的數學運算與邏輯操作
- 缺失值處理:內建對缺失值(NaN)的支援與處理機制
import pandas as pd
import numpy as np
# 建立 Series 物件
s = pd.Series([1, 3, 5, np.nan, 6, 8])
print(s)
#### 內容解密:
1. 匯入必要的函式庫:pandas 用於資料處理,numpy 用於數值計算
2. 建立 Series 時,pandas 自動生成預設的整數索引(0 到 5)
3. np.nan 代表缺失值,pandas 正確處理並保留其狀態
4. Series 自動推斷資料型別(float64)以容納 NaN 值
DataFrame 的核心功能
DataFrame 是 pandas 中的二維標籤化資料結構,可視為具有列標籤的二維表格。其主要特性包括:
- 靈活的資料操作:支援豐富的資料篩選、轉換與合併操作
- 多維資料處理:可同時處理多列資料,並進行複雜的運算
- 強大的索引機制:支援多層索引與靈活的資料存取方式
# 建立 DataFrame 物件
data = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'city': ['New York', 'London', 'Tokyo']}
df = pd.DataFrame(data)
print(df)
#### 內容解密:
1. 使用字典建立 DataFrame,每個鍵成為一列
2. pandas 自動為每行生成預設整數索引
3. 不同列可包含不同資料型別(字串與整數)
4. DataFrame 正確對齊不同列的資料並保持結構完整性
資料選取與指定技術
根據位置的選取
pandas 提供 iloc
方法進行根據位置的資料選取,這種方法不依賴於索引的標籤,而是根據元素的實際位置進行存取。
# 建立範例 DataFrame
df = pd.DataFrame(np.arange(12).reshape(3, 4),
columns=['A', 'B', 'C', 'D'])
# 使用 iloc 選取資料
print(df.iloc[1:3, 0:2])
#### 內容解密:
1. iloc 使用根據整數的位置進行資料選取
2. 行切片(1:3)選取第 1 到第 2 行(從 0 開始計數)
3. 列切片(0:2)選取第 0 到第 1 列
4. 輸出結果為指定範圍內的元素構成的新 DataFrame
根據標籤的選取
相較於 iloc
,loc
方法支援根據索引標籤的資料選取,能夠更直觀地存取特定資料。
# 使用 loc 選取資料
df = pd.DataFrame(np.arange(12).reshape(3, 4),
index=['r1', 'r2', 'r3'],
columns=['A', 'B', 'C', 'D'])
print(df.loc['r1':'r2', 'A':'B'])
#### 內容解密:
1. loc 使用索引標籤進行資料選取
2. 行標籤範圍('r1':'r2')包含結束標籤 'r2'
3. 列標籤範圍('A':'B')同樣包含結束標籤 'B'
4. 這種方法提供了更具可讀性的資料存取方式
資料型別與缺失值處理
數值型別處理
pandas 支援多種數值型別,包括整數、浮點數等,並提供對缺失值的完整支援。
# 建立包含不同數值型別的 DataFrame
df = pd.DataFrame({
'int_col': [1, 2, 3],
'float_col': [1.1, 2.2, np.nan]
})
print(df.dtypes)
#### 內容解密:
1. int_col 正確推斷為 int64 型別
2. float_col 推斷為 float64 型別以容納 NaN 值
3. pandas 自動選擇適當的資料型別以儲存資料
4. dtypes 屬性提供每列的資料型別資訊
缺失值處理策略
pandas 提供多種缺失值處理方法,包括刪除、填充等。
# 建立包含缺失值的 DataFrame
df = pd.DataFrame({
'A': [1, np.nan, 3],
'B': [4, 5, np.nan]
})
# 使用 fillna 方法填充缺失值
df_filled = df.fillna(0)
print(df_filled)
#### 內容解密:
1. fillna 方法用指定值(0)填充缺失值
2. 原始 DataFrame 中的 NaN 被替換為 0
3. 傳回新的 DataFrame 而不修改原始物件
4. 可根據需求選擇不同的填充策略
資料輸入輸出(I/O)操作
pandas 支援多種資料格式的讀寫操作,包括 CSV、Excel、SQL 等。
CSV 檔案操作
# 建立範例 DataFrame
data = {'name': ['Alice', 'Bob'],
'age': [25, 30]}
df = pd.DataFrame(data)
# 寫入 CSV 檔案
df.to_csv('example.csv', index=False)
# 讀取 CSV 檔案
df_read = pd.read_csv('example.csv')
print(df_read)
#### 內容解密:
1. to_csv 方法將 DataFrame 儲存為 CSV 檔案
2. index=False 引數避免寫入索引列
3. read_csv 方法讀取 CSV 檔案內容
4. 自動推斷資料型別並建立新的 DataFrame
資料分組與聚合操作
pandas 提供強大的分組與聚合功能,能夠高效地進行資料分析。
分組聚合範例
# 建立範例 DataFrame
data = {'category': ['A', 'A', 'B', 'B'],
'value': [10, 15, 20, 25]}
df = pd.DataFrame(data)
# 分組計算平均值
grouped = df.groupby('category')['value'].mean()
print(grouped)
#### 內容解密:
1. groupby 方法按 'category' 列進行分組
2. 對 'value' 列進行平均值計算
3. 傳回 Series 物件,包含每組的計算結果
4. 索引為原始的分組類別標籤
pandas 函式庫使用與效能最佳化
資料處理基礎與進階應用
pandas 是 Python 中最強大的資料處理工具之一,提供高效的 DataFrame 結構和豐富的資料操作方法。本章將探討 pandas 的核心功能、進階應用以及效能最佳化技巧。
資料重塑與轉換
在資料分析過程中,經常需要對資料進行重塑和轉換以滿足不同的分析需求。pandas 提供了多種方法來實作這一點:
pd.DataFrame.stack()
和pd.DataFrame.unstack()
- 用於將資料從寬格式轉換為長格式,或反之。
- 適用於多層索引的資料結構。
pd.DataFrame.melt()
- 將寬格式資料轉換為長格式。
- 適合用於將多個欄位合併成兩個欄位(變數和值)。
pd.DataFrame.pivot()
和pd.pivot_table()
- 用於將長格式資料轉換為寬格式。
pivot_table()
支援聚合操作,適合處理重複索引的情況。
pd.DataFrame.explode()
- 將包含列表的欄位展開成多行。
- 適合處理巢狀資料結構。
分組與視窗操作
分組操作是資料分析中的常見需求,pandas 提供了 groupby()
方法來實作:
基本分組操作
- 使用
groupby()
對資料進行分組,並進行聚合計算。 - 支援多欄位分組和自訂聚合函式。
- 使用
groupby().apply()
- 對每個分組套用自訂函式。
- 適合處理複雜的分組運算邏輯。
視窗操作
- 使用
rolling()
和expanding()
進行視窗計算。 - 適合進行時間序列分析和移動平均計算。
- 使用
時間序列處理
pandas 提供了強大的時間序列處理功能:
時區處理
- 使用
tz_localize()
和tz_convert()
處理不同時區的時間資料。
- 使用
日期偏移
- 使用
DateOffsets
對日期進行偏移運算。 - 支援多種日期偏移規則,如工作日、月末等。
- 使用
時間序列選取
- 使用布林索引和
between_time()
選取特定時間範圍的資料。
- 使用布林索引和
重取樣
- 使用
resample()
對時間序列進行重取樣。 - 支援上取樣和下取樣,並可進行聚合計算。
- 使用
效能最佳化技巧
避免使用
dtype=object
- 物件型別會大幅降低運算效率,盡量使用數值型別或類別型別。
注意資料大小
- 大型資料集需要更多的記憶體,必要時使用分塊處理或 Dask 等工具。
使用向量化運算
- 向量化運算遠快於迴圈運算,盡量使用 pandas 內建的向量化函式。
避免修改原始資料
- 修改原始資料可能導致意外錯誤,建議建立副本後再進行操作。
對低基數資料進行字典編碼
- 對類別型資料進行字典編碼可以減少記憶體使用並提升效能。
pandas 生態系統
pandas 與其他 Python 資料科學函式庫緊密整合,形成了豐富的生態系統:
基礎函式庫
- NumPy:提供底層數值運算支援。
- PyArrow:支援高效的資料序列化和交換。
探索性資料分析
- YData Profiling:提供自動化的資料探勘和報告功能。
資料驗證
- Great Expectations:提供資料品質驗證和測試框架。
視覺化
- Plotly:提供互動式視覺化功能。
- PyGWalker:提供拖拽式的資料探索介面。
機器學習與科學計算
- scikit-learn:提供機器學習演算法。
- XGBoost:提供高效的梯度提升樹模型。
資料函式庫整合
- DuckDB:提供高效的 OLAP 資料函式庫功能。
- 其他 DataFrame 相容函式庫如 Ibis、Dask、Polars 和 cuDF 等,提供了不同的效能最佳化和分散式計算能力。
透過結合 pandas 的強大功能和其生態系統中的其他工具,可以大幅提升資料處理和分析的效率,為資料科學和分析工作提供堅實的基礎。
pandas 技術手冊:基礎與應用
pandas 是 Python 中用於建立和操作結構化資料的函式庫。所謂結構化資料,是指類別似試算表或資料函式庫中以列和欄呈現的表格資料。資料科學家、分析師、程式設計師和工程師等專業人士利用 pandas 來處理和轉換資料。
pandas 的適用範圍與限制
pandas 適用於處理「小資料」(可容納在單一機器記憶體中的資料)。然而,其語法和運算方式已啟發或被其他專案(如 PySpark、Dask 和 cuDF 等)採用。這些專案具有不同的目標,但有些可以擴充套件到處理大資料。因此,瞭解 pandas 的工作原理具有重要價值,因為其功能正成為與結構化資料互動的實際標準 API。
本文的目的與適用物件
本文包含大量範例,從簡單到進階不等。所有範例均以清晰、簡潔和現代化的 pandas 程式碼撰寫。「運作原理」部分對每個步驟進行詳細說明。通常,在「更多資訊」部分,會提供看似全新的範例。本文內容豐富,包含大量 pandas 程式碼。
雖然不是絕對必要,但建議讀者按順序閱讀本文。範例的結構設計為先使用小型、有針對性的範例介紹概念和功能,然後不斷擴充套件到更複雜的應用。
本文的章節安排
- pandas 基礎:介紹主要的 pandas 物件,包括 Series、DataFrame 和 Index。
- 選擇與指定:展示如何篩選已載入 pandas 資料結構中的資料。
- 資料型別:探討 pandas 的底層型別系統,這是一個快速演進的領域,瞭解不同型別及其區別至關重要。
- pandas I/O 系統:說明為什麼 pandas 長期以來一直是讀取和寫入多種儲存格式的流行工具。
- 演算法及其應用:介紹使用 pandas 資料結構進行計算的基礎。
- 視覺化:展示如何直接使用 pandas 進行繪圖,以及與 seaborn 函式庫的整合應用。
- 重塑 DataFrame:討論多種資料轉換和匯總的方法。
- Group By:展示如何分割和匯總 DataFrame 中的子集。
- 時間序列資料型別和演算法:介紹 pandas 中時間序列分析所依賴的日期/時間型別,並以實際資料進行示範。
- 一般使用/效能提示:討論使用者常見的陷阱,並展示慣用的解決方案。
- pandas 生態系統:介紹其他與 pandas 整合、擴充套件或互補的開源函式庫。
如何充分利用本文
- 下載本文的所有程式碼,儲存在 Jupyter Notebook 中。在閱讀每個範例時,在 Notebook 中執行每一步程式碼,並自行探索。
- 在瀏覽器的某個分頁中開啟 pandas 官方檔案(http://pandas.pydata.org/pandas-docs/stable/)。pandas 檔案是一份優秀的資源,包含超過 1,000 頁的資料。大多數 pandas 操作都有範例,通常在「參見」部分會有直接連結。
本文所需的環境
- pandas 是 Python 的第三方套件,本文印刷時正在從 2.x 系列過渡到 3.x 系列。本文的範例應可在 pandas 2.0 及以上版本、Python 3.9 及以上版本中執行。
- 本文的程式碼將使用 pandas、NumPy 和 PyArrow 函式庫。Jupyter Notebook 檔案也是視覺化和檢查程式碼的流行方式。所有這些函式庫都可透過 pip 或您選擇的套件管理器安裝。對於 pip 使用者,可以執行:
python -m pip install pandas numpy pyarrow notebook
詳細安裝步驟
- 登入或註冊 www.packt.com。
- 選擇「支援」標籤。
- 點選「程式碼下載」。
- 在搜尋框中輸入書名,並按照螢幕上的指示操作。
本文的程式碼包也託管在 GitHub 上,網址為 https://github.com/WillAyd/Pandas-Cookbook-Third-Edition。如果程式碼有更新,將在現有的 GitHub 儲存函式庫中更新。
執行 Jupyter Notebook
建議透過執行 Jupyter Notebook 來學習本文的內容,這樣可以在閱讀範例時執行程式碼,並深入瞭解相關知識。