Pandas DataFrame 與 Series:資料分析的雙劍客

Pandas DataFrame 與 Series:Python 資料分析的雙劍客 - CCC Blog
電腦螢幕上顯示著各種資料分析圖表和儀表板,象徵著 Pandas 的強大資料處理能力。

在 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

ListDictionarySeriesDataFrame
結構有序元素集合鍵值對集合帶標籤的一維陣列表格 (由多個 Series 組成)
維度一維一維 (鍵值對)一維二維
索引整數 (0-based)鍵 (key)整數或自訂標籤列索引 (index) 和欄標籤 (columns)
向量化運算不支援不支援支援支援
所屬函式庫Python 內建Python 內建PandasPandas

總結

Pandas 的 DataFrameSeries 是 Python 資料分析中不可或缺的工具。DataFrame 提供了強大的二維表格資料處理能力,而 Series 則是一維資料的有力表示。理解 DataFrame 是由多個 Series 組成的這個核心概念,將幫助您更流暢地進行資料清理、轉換、分析和視覺化。

較新的 較舊