Pandas 作為 Python 資料科學領域的核心工具,提供高效的資料結構與豐富的資料處理功能,廣泛應用於資料清理、轉換、分析和視覺化。本文涵蓋了 Pandas 的核心概念,包含 Series 和 DataFrame 的建立與操作、資料選擇與指定、資料讀取與儲存、以及資料分組與聚合等。此外,文章也探討了時間序列資料處理、資料視覺化技巧,以及效能最佳化策略,例如使用向量化操作取代迴圈以提升運算效率。透過豐富的程式碼範例與詳細的解說,讀者可以逐步學習如何運用 Pandas 進行資料分析,並將其應用於實際的資料處理任務中。
Pandas 資料分析實戰手冊第三版:Python 科學計算、時間序列與探索性資料分析實用
Pandas 是 Python 生態系統中最重要的資料分析函式庫之一,提供高效的資料結構與豐富的資料處理功能,廣泛應用於科學計算、時間序列分析及探索性資料分析。本文由 Pandas 核心維護者 William Ayd 與知名 Python 教育家 Matthew Harrison 共同撰寫,深入介紹 Pandas 的核心功能與進階應用,並提供豐富的實務範例與最佳實踐。
Pandas 的誕生與發展歷程
Pandas 於 2008 年由 Wes McKinney 建立,最初作為個人資料分析工具箱,後來逐漸發展成為開源社群維護的重要專案。Wes McKinney 在序言中回顧了 Pandas 的發展歷史,指出當時 Python 在統計分析與商業分析領域的應用仍十分有限,而 Pandas 的出現填補了這一空白。如今,Pandas 已成為 Python 資料科學領域的核心工具之一,擁有活躍的開發者社群與數千名貢獻者。
Pandas 核心功能概述
Pandas 提供兩種主要資料結構:Series(一維陣列)與 DataFrame(二維表格),這兩種結構為資料操作提供了靈活且高效的基礎。
import pandas as pd
# 建立簡單的 Series
data = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
print(data)
內容解密:
上述程式碼建立了一個 Series 物件,其中包含資料 [1, 2, 3, 4] 與對應的索引 ['a', 'b', 'c', 'd']。Pandas 的 Series 結構類別似於 Python 中的列表,但具備更豐富的索引功能,能夠支援更複雜的資料操作。
資料讀取與儲存的最佳實踐
Pandas 支援多種檔案格式的讀取與儲存,包括 CSV、Excel、JSON 與 SQL 資料函式庫等。本文將介紹如何使用 Pandas 高效地處理不同格式的資料檔案。
# 讀取 CSV 檔案
df = pd.read_csv('data.csv')
# 將 DataFrame 儲存為 CSV 檔案
df.to_csv('output.csv', index=False)
內容解密:
pd.read_csv()用於讀取 CSV 檔案,支援多種引數設定,如指定分隔符、處理缺失值等。to_csv()方法將 DataFrame 儲存為 CSV 檔案,其中index=False表示不儲存索引欄位。
時間序列資料處理
Pandas 提供強大的時間序列處理功能,包括日期範圍生成、時間重取樣與滾動視窗計算等。
# 建立日期範圍
date_range = pd.date_range(start='2023-01-01', periods=10, freq='D')
print(date_range)
內容解密:
此範例使用 pd.date_range() 建立一個包含 10 天的日期範圍,頻率為每日。Pandas 的時間序列功能在金融資料分析、物聯網資料處理等領域具有廣泛的應用價值。
資料清理與轉換技巧
在實際資料分析工作中,資料清理是至關重要的一步。Pandas 提供豐富的資料轉換功能,如處理缺失值、資料型別轉換等。
# 建立範例 DataFrame
df = pd.DataFrame({
'A': [1, 2, None, 4],
'B': ['x', 'y', 'z', 'w']
})
# 填補缺失值
df['A'] = df['A'].fillna(df['A'].mean())
print(df)
內容解密:
此範例展示如何使用 fillna() 方法填補數值欄位的缺失值。這裡採用該欄位平均值進行填補,在實際應用中可根據具體情況選擇適當的填補策略。
資料分組與聚合分析
Pandas 的分組聚合功能允許使用者按照某個或多個欄位對資料進行分組,並對每組資料進行聚合運算。
# 建立範例 DataFrame
df = pd.DataFrame({
'Category': ['A', 'B', 'A', 'B', 'A'],
'Value': [10, 20, 30, 40, 50]
})
# 分組計算總和
grouped = df.groupby('Category')['Value'].sum()
print(grouped)
內容解密:
此範例使用 groupby() 方法按照 Category 欄位進行分組,並計算每組 Value 的總和。這種分組聚合操作在銷售資料分析、使用者行為分析等場景中非常常見。
資料合併與連線操作
Pandas 提供多種資料合併方法,包括內連線、外連線等,能夠滿足不同的資料整合需求。
# 建立兩個範例 DataFrame
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['A', 'B', 'D'], 'value2': [4, 5, 6]})
# 執行內連線
merged = pd.merge(df1, df2, on='key', how='inner')
print(merged)
內容解密:
此範例展示如何使用 pd.merge() 方法執行內連線操作。內連線只保留兩個 DataFrame 中鍵值相同的記錄,而外連線則會保留所有記錄。
探索性資料分析(EDA)實踐
探索性資料分析是資料分析流程中的重要步驟,旨在透過統計與視覺化手段瞭解資料的基本特徵。Pandas 結合 Matplotlib/Seaborn 等視覺化工具,能夠高效地進行 EDA 工作。
import matplotlib.pyplot as plt
# 建立範例 DataFrame
df = pd.DataFrame({
'x': range(10),
'y': [i**2 for i in range(10)]
})
# 繪製折線圖
plt.plot(df['x'], df['y'])
plt.show()
圖表翻譯:
此圖表展示了 x 與 y 之間的關係,其中 y 是 x 的平方。透過視覺化可以直觀地觀察到兩者之間的非線性關係。
pandas 深度解析與實務應用
pandas 是 Python 生態系統中最為重要且廣泛使用的資料分析函式庫之一,其提供了強大的資料結構與資料分析工具,幫助資料科學家與分析師更高效地處理與分析資料。本文將探討 pandas 的核心功能、實務應用及其在資料處理中的關鍵角色。
pandas 基礎架構
pandas 主要提供了兩種核心資料結構:Series 與 DataFrame。
Series
Series 是一種一維的標籤化陣列,能夠儲存任意型別的資料(整數、浮點數、字串等)。其主要特點包括:
- 索引(Index):每個元素都有一個對應的索引標籤,用於快速存取與操作資料。
- 向量化操作:支援多種向量化運算,大幅提升運算效率。
import pandas as pd
# 建立一個簡單的 Series
data = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
print(data)
#### 內容解密:
此範例展示如何建立一個 `Series` 物件。程式碼中:
1. 匯入 pandas 函式庫並建立一個包含整數的列表。
2. 使用 `pd.Series()` 將列表轉換為 `Series`,並指定自定義索引標籤。
3. `print(data)` 輸出結果,顯示 `Series` 的內容及其對應的索引。
DataFrame
DataFrame 是一種二維的標籤化資料結構,可以視為是由多個 Series 組成的字典。其特性包括:
- 多維資料儲存:能夠儲存多列資料,每列可以是不同的資料型別。
- 豐富的操作功能:支援列選擇、過濾、合併等多種操作。
# 建立一個簡單的 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35]}
df = pd.DataFrame(data)
print(df)
#### 內容解密:
此範例展示如何建立一個 `DataFrame`。程式碼中:
1. 定義一個包含姓名與年齡資訊的字典。
2. 使用 `pd.DataFrame()` 將字典轉換為 `DataFrame`。
3. 輸出結果顯示 `DataFrame` 的結構與內容。
資料選擇與指定
pandas 提供了多種靈活的資料選擇方法,包括根據位置的選擇(iloc)與根據標籤的選擇(loc)。
位置選擇
# 使用 iloc 進行位置選擇
data = pd.Series([1, 2, 3, 4])
print(data.iloc[0]) # 輸出第一個元素
#### 內容解密:
此範例展示如何使用 `iloc` 進行位置選擇。程式碼中:
1. 建立一個 `Series` 物件。
2. 使用 `iloc[0]` 存取第一個元素。
3. 輸出結果為 `1`,表示成功取得指定位置的資料。
標籤選擇
# 使用 loc 進行標籤選擇
data = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
print(data.loc['a']) # 輸出索引 'a' 對應的元素
#### 內容解密:
此範例展示如何使用 `loc` 進行標籤選擇。程式碼中:
1. 建立一個帶有自定義索引的 `Series`。
2. 使用 `loc['a']` 存取索引標籤為 'a' 的元素。
3. 輸出結果為 `1`,表示成功取得指定標籤的資料。
資料輸入輸出(I/O)功能
pandas 支援多種資料格式的讀取與寫入,包括 CSV、Excel、SQL、JSON 等。
CSV 操作
# 讀取 CSV 檔案
df = pd.read_csv('data.csv')
# 將 DataFrame 儲存為 CSV
df.to_csv('output.csv', index=False)
#### 內容解密:
此範例展示如何讀取與寫入 CSV 檔案。程式碼中:
1. 使用 `pd.read_csv()` 從指定路徑讀取 CSV 檔案並轉換為 `DataFrame`。
2. 使用 `to_csv()` 將 `DataFrame` 儲存為新的 CSV 檔案,並設定 `index=False` 以避免儲存索引列。
資料分組與聚合
pandas 提供強大的分組與聚合功能,能夠對資料進行高效的分組統計。
# 分組並計算平均值
df = pd.DataFrame({'Category': ['A', 'B', 'A', 'B'],
'Value': [10, 20, 30, 40]})
grouped = df.groupby('Category')['Value'].mean()
print(grouped)
#### 內容解密:
此範例展示如何進行資料分組並計算平均值。程式碼中:
1. 建立一個包含類別與數值的 `DataFrame`。
2. 使用 `groupby()` 按類別進行分組,並選取 `Value` 列計算平均值。
3. 輸出結果顯示各類別的平均值。
pandas 實戰手冊:資料處理與分析技術
資料分析基礎與進階應用
在資料分析的世界中,pandas 是一個不可或缺的強大工具。本文將帶領讀者深入瞭解 pandas 的核心功能與應用,從基礎的資料操作到進階的資料分析技術,都將進行全面性的探討。
第 6 章:資料視覺化
資料視覺化是資料分析中至關重要的一環。透過視覺化的方式,我們可以更直觀地理解資料的分佈、趨勢和相關性。
建立聚合資料圖表
使用 pandas 和 Matplotlib,可以輕鬆地從聚合資料中建立各種圖表。以下是一個簡單的範例:
import pandas as pd
import matplotlib.pyplot as plt
# 建立範例資料
data = {'類別': ['A', 'B', 'C', 'A', 'B', 'C'],
'數值': [10, 20, 30, 15, 25, 35]}
df = pd.DataFrame(data)
# 聚合資料
grouped_df = df.groupby('類別')['數值'].sum().reset_index()
# 繪製柱狀圖
plt.figure(figsize=(8,6))
plt.bar(grouped_df['類別'], grouped_df['數值'], color ='maroon')
plt.xlabel("類別")
plt.ylabel("總數值")
plt.title("各類別總數值")
plt.show()
內容解密:
- 首先,我們匯入必要的函式庫:
pandas用於資料處理,matplotlib.pyplot用於繪圖。 - 建立一個包含類別和數值的 DataFrame。
- 使用
groupby方法對資料進行聚合,計算每個類別的數值總和。 - 使用 Matplotlib 繪製柱狀圖,展示各類別的總數值。
自訂圖表外觀
Matplotlib 提供了豐富的自訂選項,讓我們可以調整圖表的各種屬性,如顏色、標籤、標題等。
# 自訂圖表外觀
plt.figure(figsize=(10,6))
plt.bar(grouped_df['類別'], grouped_df['數值'], color ='skyblue')
plt.xlabel("類別", fontsize=14)
plt.ylabel("總數值", fontsize=14)
plt.title("各類別總數值", fontsize=16)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.show()
內容解密:
- 調整圖表的大小為 (10,6)。
- 將柱狀圖的顏色改為天藍色(skyblue)。
- 調整 x 軸和 y 軸標籤的字型大小為 14。
- 調整標題的字型大小為 16。
- 調整 x 軸和 y 軸刻度標籤的字型大小為 12。
第 7 章:重塑 DataFrame
在資料分析過程中,我們經常需要對 DataFrame 進行重塑,以滿足不同的分析需求。
使用 pd.merge 合併 DataFrame
合併 DataFrame 是資料整合的重要步驟。以下是一個使用 pd.merge 的範例:
import pandas as pd
# 建立兩個範例 DataFrame
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['A', 'B', 'D'], 'value2': [4, 5, 6]})
# 使用 pd.merge 合併 DataFrame
merged_df = pd.merge(df1, df2, on='key', how='inner')
print(merged_df)
內容解密:
- 建立兩個包含共同鍵(key)的 DataFrame。
- 使用
pd.merge方法根據共同鍵合併兩個 DataFrame。 - 設定
how='inner'表示只保留兩個 DataFrame 中鍵都存在的列。
第 8 章:Group By 操作
Group By 是 pandas 中強大的資料分析工具,可以對資料進行分組並進行各種聚合操作。
分組計算多個欄位
我們可以對多個欄位進行分組並計算聚合值。以下是一個範例:
import pandas as pd
# 建立範例資料
data = {'類別': ['A', 'A', 'B', 'B', 'C', 'C'],
'子類別': ['X', 'Y', 'X', 'Y', 'X', 'Y'],
'數值1': [10, 20, 30, 40, 50, 60],
'數值2': [100, 200, 300, 400, 500, 600]}
df = pd.DataFrame(data)
# 分組計算多個欄位的總和
grouped_df = df.groupby(['類別', '子類別']).sum().reset_index()
print(grouped_df)
內容解密:
- 建立一個包含多個欄位的 DataFrame。
- 使用
groupby方法對「類別」和「子類別」進行分組。 - 對分組後的資料計算「數值1」和「數值2」的總和。
第 9 章:時間序列資料處理
時間序列資料在金融、氣象等領域中非常常見。pandas 提供了強大的時間序列處理功能。
處理時區
時區處理是時間序列分析中的重要問題。以下是一個處理時區的範例:
import pandas as pd
# 建立包含時區資訊的時間序列
rng = pd.date_range('2023-01-01', periods=5, freq='D', tz='UTC')
ts = pd.Series(range(5), index=rng)
# 轉換時區
ts_tokyo = ts.tz_convert('Asia/Tokyo')
print(ts_tokyo)
內容解密:
- 使用
pd.date_range建立一個包含時區資訊(UTC)的日期範圍。 - 建立一個以該日期範圍為索引的 Series。
- 使用
tz_convert方法將時區轉換為東京時間。
第 10 章:效能最佳化與最佳實踐
在使用 pandas 的過程中,效能最佳化是非常重要的。以下是一些最佳實踐:
使用向量化操作代替迴圈
向量化操作可以顯著提高運算效率。以下是一個範例:
import pandas as pd
import numpy as np
# 建立一個大型 DataFrame
df = pd.DataFrame(np.random.randn(1000000, 2), columns=['A', 'B'])
# 使用向量化操作計算兩列的和
df['C'] = df['A'] + df['B']
內容解密:
- 建立一個包含一百萬行資料的 DataFrame。
- 使用向量化操作直接計算兩列的和並存入新列 ‘C’。