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

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

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 則是一維資料的有力表示。 掌握這兩種資料結構,您就能夠更輕鬆地進行資料清理、轉換、分析和視覺化。

張貼留言

較新的 較舊