在 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
有多種方式可以建立 DataFrame,最常見的是從字典或串列來建立。
import pandas as pd
# 從字典建立 DataFrame (最常見)
data_dict = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [30, 25, 35],
'City': ['New York', 'London', 'Paris']
}
df_from_dict = pd.DataFrame(data_dict)
print("--- 從字典建立 ---")
print(df_from_dict)
# 從串列的串列建立 DataFrame
data_list = [
['Alice', 30, 'New York'],
['Bob', 25, 'London'],
['Charlie', 35, 'Paris']
]
df_from_list = pd.DataFrame(data_list, columns=['Name', 'Age', 'City'])
print("\n--- 從串列的串列建立 ---")
print(df_from_list)
DataFrame 的基本操作
選取欄位
使用 [] 或 [[]]。
# 選擇單一欄位 (結果是一個 Series)
names = df_from_dict['Name']
# 選擇多個欄位 (結果是一個 DataFrame)
name_and_age = df_from_dict[['Name', 'Age']]
選取列 (篩選)
使用 .loc[] (依索引標籤) 或 .iloc[] (依整數位置)。
# 透過索引標籤選擇第一列
first_row = df_from_dict.loc[0]
# 透過條件篩選 Age > 30 的列
older_than_30 = df_from_dict[df_from_dict['Age'] > 30]
新增欄位
df_from_dict['Salary'] = [50000, 60000, 70000]
刪除欄位
# axis=1 表示刪除欄
df_no_city = df_from_dict.drop('City', axis=1)
修改資料
# 將索引為 0 的 Age 修改為 32
df_from_dict.loc[0, 'Age'] = 32
- .head() / .tail(): 查看前/後幾列。
- .shape: 查看形狀 (列數, 欄數)。
- .info(): 查看基本資訊 (欄位、型別、缺失值)。
- .describe(): 查看統計摘要。
Series:一維資料的專家
什麼是 Series?
Series 是一個一維的、帶有標籤的陣列,它可以看作是 DataFrame 中的一欄。Series 具有以下特點:
- 有序的資料序列。
- 通常包含相同資料型別的元素。
- 帶有可自訂的索引 (index)。
- 可以進行向量化運算 (對整個序列進行批次操作)。
建立 Series
import numpy as np
# 從串列建立 Series
s1 = pd.Series([10, 20, 30, 40])
# 從字典建立 Series (字典的鍵會變成索引)
s2 = pd.Series({'a': 10, 'b': 20, 'c': 30})
# 建立時自訂索引
s3 = pd.Series([1, 2, 3], index=['x', 'y', 'z'])
Series 的基本操作
Series 的操作與 DataFrame 類似,但更簡單,因為它只有一維。
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
# 索引
print(s['b']) # 輸出: 20
# 切片
print(s[1:]) # 輸出 b, c 的 Series
# 向量化運算
print(s + 10) # 每個元素都加 10
# 常用方法
print(s.value_counts()) # 計算每個值出現的次數
四大資料結構比較:List vs. Dict vs. Series vs. DataFrame
List | Dictionary | Series | DataFrame | |
---|---|---|---|---|
結構 | 有序元素集合 | 鍵值對集合 | 帶標籤的一維陣列 | 表格 (由多個 Series 組成) |
維度 | 一維 | 一維 (鍵值對) | 一維 | 二維 |
索引 | 整數 (0-based) | 鍵 (key) | 整數或自訂標籤 | 列索引 (index) 和欄標籤 (columns) |
向量化運算 | 不支援 | 不支援 | 支援 | 支援 |
所屬函式庫 | Python 內建 | Python 內建 | Pandas | Pandas |
總結
Pandas 的 DataFrame 和 Series 是 Python 資料分析中不可或缺的工具。DataFrame 提供了強大的二維表格資料處理能力,而 Series 則是一維資料的有力表示。理解 DataFrame 是由多個 Series 組成的這個核心概念,將幫助您更流暢地進行資料清理、轉換、分析和視覺化。