人工智能之數據分析 Pandas

第二章 Series


(文章目錄)


前言

Pandas 的 Series 是其最基礎、最核心的一維數據結構,是學習 Pandas 的起點。本文從定義、特點、創建方式、常用操作、注意事項等方面進行系統而詳細的介紹。


一、什麼是 Series?

Series 是一個帶標籤索引的一維數組,由兩部分組成:

  • values(值):實際存儲的數據,底層為 NumPy 數組(ndarray),支持整數、浮點、字符串、布爾值等任意類型,也可包含缺失值 NaN
  • index(索引):與每個值一一對應的標籤,默認為從 0 開始的整數,但可自定義為字符串、日期等可哈希類型。

✅ 簡單理解:Series = 字典 + 數組

  • 像字典一樣可通過“鍵”(索引)快速訪問值;
  • 像數組一樣支持向量化運算和高效數值計算。

二、Series 的核心特點

特性 説明
一維結構 只有一列數據
自動對齊 運算時按索引對齊,不匹配的位置返回 NaN
支持缺失值 使用 NaN 表示缺失數據
可命名 可通過 name 參數設置名稱(常用於轉為 DataFrame 的列名)
索引可重複 允許重複索引(但會影響唯一訪問)
不可變大小(默認) 創建後長度固定,但可通過 appenddrop 等生成新對象

三、創建 Series 的 4 種主要方式

1. 從列表或 NumPy 數組創建

import pandas as pd
import numpy as np

# 列表(默認整數索引)
s1 = pd.Series([10, 20, 30])
# 自定義索引
s2 = pd.Series([10, 20, 30], index=['a', 'b', 'c'], name='成績')
# 從 NumPy 數組
arr = np.array([1.1, 2.2, 3.3])
s3 = pd.Series(arr, index=['x', 'y', 'z'])

2. 從字典創建(最常用之一)

data_dict = {'數學': 90, '語文': 85, '英語': 95}
s4 = pd.Series(data_dict)  # 字典的 key → index,value → data

# 若指定 index 中有字典未包含的鍵,則對應值為 NaN
s5 = pd.Series(data_dict, index=['數學', '物理'])  
# 輸出:數學 90.0,物理 NaN(注意 dtype 變為 float64)

3. 用標量(單個值)創建

s6 = pd.Series(5, index=['A', 'B', 'C'])  
# 所有位置都填充為 5
# A    5
# B    5
# C    5

4. 創建空 Series

empty_s = pd.Series(dtype='float64')  # 必須指定 dtype

四、Series 的常用屬性與方法

屬性/方法 説明 示例
.index 獲取索引 s.index
.values 獲取數據(NumPy 數組) s.values
.name 獲取或設置名稱 s.name = '分數'
.dtype 數據類型 s.dtype
.shape 形狀(如 (3,) s.shape
.size 元素總數 s.size
.isnull() / .notnull() 判斷是否為 NaN s.isnull()
.unique() 返回唯一值 s.unique()
.value_counts() 統計各值出現次數 s.value_counts()
.describe() 描述性統計(均值、標準差等) s.describe()
.sort_values() 按值排序 s.sort_values()
.sort_index() 按索引排序 s.sort_index()
.astype('float64') 類型轉換 s.astype('str')
.to_list() 轉為 Python 列表 s.to_list()
.to_frame() 轉為 DataFrame s.to_frame()

五、數據訪問與操作

1. 訪問元素

s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])

s['a']        # 標籤索引 → 1
s[0]          # 位置索引 → 1(不推薦,易混淆)
s.loc['a']    # 顯式索引(推薦)
s.iloc[0]     # 隱式位置索引(推薦用於位置訪問)

2. 切片

s['a':'c']      # 顯式切片 → 包含 'c'(前閉後閉)
s.iloc[0:2]     # 隱式切片 → 不包含索引 2(前閉後開)

3. 修改與增刪

s['b'] = 20     # 修改
s['e'] = 5      # 新增(自動擴展)
del s['a']      # 刪除(原地修改)
s_new = s.drop('c')  # 返回新 Series,不修改原對象

4. 向量化運算與過濾

s * 2           # 所有元素 ×2
s[s > 3]        # 布爾索引:篩選值大於 3 的元素
np.sqrt(s)      # 應用 NumPy 函數

六、重要注意事項

  1. 索引對齊機制 兩個 Series 運算時,Pandas 會自動按索引對齊,非公共索引位置結果為 NaN

    s1 = pd.Series([1, 2], index=['a', 'b'])
    s2 = pd.Series([3, 4], index=['b', 'c'])
    print(s1 + s2)  
    # a    NaN
    # b    6.0
    # c    NaN
    
  2. NaN 的處理

    • NaN != NaN,不能用 == 判斷,應使用 isnull()pd.isna()
    • NaN 的 Series,dtype 通常為 float64
  3. 索引可重複,但慎用 重複索引會導致 s['key'] 返回多個值(Series 而非標量)

  4. 性能提示

    • 儘量避免頻繁修改 Series(如循環中賦值),建議一次性構建
    • 使用 .loc / .iloc 提高代碼可讀性和安全性

七、總結

Series 是 Pandas 的基石

  • 它融合了數組的高效計算與字典的靈活索引;
  • 是構建 DataFrame 的基本單元(DataFrame 的每一列就是一個 Series);
  • 掌握 Series,就掌握了 Pandas 數據操作的核心邏輯。

後續

python過渡項目部分代碼已經上傳至gitee,後續會逐步更新。

資料關注

公眾號:咚咚王 gitee:https://gitee.com/wy18585051844/ai_learning

《Python編程:從入門到實踐》 《利用Python進行數據分析》 《算法導論中文第三版》 《概率論與數理統計(第四版) (盛驟) 》 《程序員的數學》 《線性代數應該這樣學第3版》 《微積分和數學分析引論》 《(西瓜書)周志華-機器學習》 《TensorFlow機器學習實戰指南》 《Sklearn與TensorFlow機器學習實用指南》 《模式識別(第四版)》 《深度學習 deep learning》伊恩·古德費洛著 花書 《Python深度學習第二版(中文版)【純文本】 (登封大數據 (Francois Choliet)) (Z-Library)》 《深入淺出神經網絡與深度學習+(邁克爾·尼爾森(Michael+Nielsen)》 《自然語言處理綜論 第2版》 《Natural-Language-Processing-with-PyTorch》 《計算機視覺-算法與應用(中文版)》 《Learning OpenCV 4》 《AIGC:智能創作時代》杜雨+&+張孜銘 《AIGC原理與實踐:零基礎學大語言模型、擴散模型和多模態模型》 《從零構建大語言模型(中文版)》 《實戰AI大模型》 《AI 3.0》