Pandas DataFrame 與 Series:資料分析的雙劍客
在 Python 的資料分析領域中,Pandas 函式庫扮演著核心角色。它提供了兩種強大的資料結構:DataFrame 和 Series,讓您可以輕鬆地處理和分析表格資料。本文將詳細介紹 DataFrame 和 Series 的概念、用法和它們之間的關係。
什麼是 Pandas?
Pandas 是一個開源的 Python 函式庫,專為資料分析和資料操作而設計。它提供了快速、靈活且富有表現力的資料結構,讓您可以輕鬆地處理結構化資料 (例如表格資料、時間序列資料)。Pandas 的名稱來自 "panel data" (面板資料) 和 "Python data analysis" 的縮寫。
Pandas 的核心資料結構:DataFrame 和 Series
Pandas 有兩個核心的資料結構:
- DataFrame: 二維的表格狀資料結構 (就像 Excel 試算表或 SQL 表格)。
- Series: 一維的、帶有標籤的陣列 (就像 DataFrame 中的一欄)。
您可以將 DataFrame 想像成是由多個 Series 組成的,每個 Series 代表 DataFrame 中的一欄 (column)。
DataFrame
什麼是 DataFrame?
DataFrame 是一個二維的、表格狀的資料結構,它具有以下特點:
- 由行 (columns) 和列 (rows) 組成。
- 每一行可以有不同的資料型別 (例如數字、字串、布林值等)。
- 每一行都有一個欄位名稱 (column name)。
- 每一列都有一個索引 (index) (預設是從 0 開始的整數,但您可以自訂索引)。
DataFrame 類似於關聯式資料庫中的Table, 或是 Excel 的試算表
建立 DataFrame
有多種方式可以建立 DataFrame:
- 從字典 (dict) 建立: 字典的鍵 (key) 成為欄位名稱,值 (value) 成為欄位資料 (通常是串列)。
- 從串列的串列 (list of lists) 建立: 每個子串列代表一列資料。
- 從 CSV 檔案、Excel 檔案、資料庫等讀取資料。
import pandas as pd
# 從字典建立 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [30, 25, 35],
'City': ['New York', 'London', 'Paris']
}
df = pd.DataFrame(data)
print("從字典建立:")
print(df)
# 從串列的串列建立 DataFrame
data = [
['Alice', 30, 'New York'],
['Bob', 25, 'London'],
['Charlie', 35, 'Paris']
]
df2 = pd.DataFrame(data, columns=['Name', 'Age', 'City'])
print("\n從串列的串列建立:")
print(df2)
# 從 CSV 檔案讀取 (如果您的檔案在 Google Drive 上,請先掛載 Google Drive)
# df_csv = pd.read_csv('/content/drive/MyDrive/path/to/your/file.csv')
DataFrame 的基本操作
DataFrame 提供了豐富的操作方法,讓您可以輕鬆地處理資料:
- 選擇欄位:
# 選擇單一欄位 (結果是一個 Series) names = df['Name'] print(names) # 選擇多個欄位 (結果是一個 DataFrame) name_and_age = df[['Name', 'Age']] print(name_and_age)
- 選擇列 (透過索引或條件):
# 透過索引選擇 (loc - 根據標籤, iloc - 根據整數位置) first_row = df.loc[0] # 選擇第一列 (index 為 0) print(first_row) second_row = df.iloc[1] # 選擇第二列(index 為 1) print(second_row) # 透過條件篩選 older_than_30 = df[df['Age'] > 30] # 選擇 Age 大於 30 的列 print(older_than_30)
- 新增欄位:
df['Salary'] = [50000, 60000, 70000] # 新增一欄 'Salary' print(df)
- 刪除欄位:
df = df.drop('City', axis=1) # 刪除 'City' 欄 (axis=1 表示刪除欄) print(df)
- 修改資料:
df.loc[0, 'Age'] = 32 #將 index=0, 欄位=Age 的資料改成32
.head()
: 查看前幾列 (預設 5 列)。.tail()
: 查看後幾列 (預設 5 列)。.shape
: 查看 DataFrame 的形狀 (列數, 欄數)。.info()
: 查看 DataFrame 的基本資訊 (欄位名稱、資料型別、缺失值等)。.describe()
: 查看 DataFrame 的統計摘要 (計數、平均值、標準差、最小值、最大值等)。.sort_values()
: 排序。.groupby()
: 分組。
Series
什麼是 Series?
Series 是一個一維的、帶有標籤的陣列,它可以看作是 DataFrame 中的一欄 (column)。Series 具有以下特點:
- 有序
- 可包含相同資料型別的元素
- 可帶有自訂的index
- 可以進行向量化運算
建立 Series
您可以從串列、NumPy 陣列或字典建立 Series:
import pandas as pd
import numpy as np
# 從串列建立 Series
data = [10, 20, 30, 40]
s1 = pd.Series(data)
print("從串列建立:")
print(s1)
# 從 NumPy 陣列建立 Series
data = np.array([1, 2, 3, 4])
s2 = pd.Series(data)
print("\n從 NumPy 陣列建立:")
print(s2)
# 從字典建立 Series (字典的鍵會變成索引)
data = {'a': 10, 'b': 20, 'c': 30}
s3 = pd.Series(data)
print("\n從字典建立:")
print(s3)
# 自訂索引
s4 = pd.Series([1, 2, 3], index=['x', 'y', 'z'])
print("\n自訂索引:")
print(s4)
Series 的基本操作
Series 的操作與 DataFrame 類似,但由於 Series 是一維的,所以操作更簡單:
- 索引:
s = pd.Series([10, 20, 30], index=['a', 'b', 'c']) print(s['b']) # 使用自訂索引存取 print(s[1]) # 使用整數索引存取 (仍然有效)
- 切片:
print(s[1:]) # 從索引 1 到結尾 print(s['a':'c']) # 使用自訂索引切片 (包含 'c')
- 向量化運算:
s = pd.Series([1, 2, 3]) print(s + 10) # 每個元素都加 10 print(s * 2) # 每個元素都乘以 2 print(s > 2) # 每個元素都與 2 比較
- 常用方法:
.head()
,.tail()
.shape
.describe()
.sort_values()
.value_counts()
: 計算每個唯一值出現的次數。.unique()
: 取得所有不重複的值。.nunique()
: 取得不重複的值的數量。.isnull()
,.notnull()
: 檢查缺失值。
DataFrame 與 Series 的關係
- DataFrame 可以看作是由多個 Series 組成的。
- DataFrame 的每一欄 (column) 都是一個 Series。
- 當您從 DataFrame 中選擇一欄時,您得到的結果就是一個 Series。
List vs. Dictionary vs. Series vs. DataFrame
List | Dictionary | Series | DataFrame | |
---|---|---|---|---|
結構 | 有序的元素集合 | 鍵值對集合 | 帶有標籤的一維陣列 | 表格狀資料結構 (由多個 Series 組成) |
維度 | 一維 | 一維 (但鍵值對是成對出現的) | 一維 | 二維 |
資料型別 | 可以是異質的 (不同型別的元素) | 鍵必須是不可變的,值可以是任何型別 | 通常是同質的 (相同型別的元素) | 每一欄 (Series) 通常是同質的,但不同欄可以是不同型別 |
索引 | 整數索引 (從 0 開始) | 鍵 (key) | 可以是整數索引或自訂索引 | 行索引 (index) 和欄位名稱 (columns) |
可變性 | 可變 (mutable) | 可變 (mutable) | 可變 (mutable) | 可變 (mutable) |
向量化運算 | 不支援 | 不支援 | 支援 | 支援 |
Pandas | 不是 Pandas 的一部分 | 不是 Pandas 的一部分 | Pandas 的核心資料結構 | Pandas 的核心資料結構 |
總結
Pandas 的 DataFrame 和 Series 是 Python 資料分析中不可或缺的工具。DataFrame 提供了強大的表格資料處理能力,而 Series 則是一維資料的有力表示。 掌握這兩種資料結構,您就能夠更輕鬆地進行資料清理、轉換、分析和視覺化。