人工智能之數據分析 Pandas
第二章 Series
(文章目錄)
前言
Pandas 的 Series 是其最基礎、最核心的一維數據結構,是學習 Pandas 的起點。本文從定義、特點、創建方式、常用操作、注意事項等方面進行系統而詳細的介紹。
一、什麼是 Series?
Series 是一個帶標籤索引的一維數組,由兩部分組成:
- values(值):實際存儲的數據,底層為 NumPy 數組(
ndarray),支持整數、浮點、字符串、布爾值等任意類型,也可包含缺失值NaN。 - index(索引):與每個值一一對應的標籤,默認為從 0 開始的整數,但可自定義為字符串、日期等可哈希類型。
✅ 簡單理解:Series = 字典 + 數組
- 像字典一樣可通過“鍵”(索引)快速訪問值;
- 像數組一樣支持向量化運算和高效數值計算。
二、Series 的核心特點
| 特性 | 説明 |
|---|---|
| 一維結構 | 只有一列數據 |
| 自動對齊 | 運算時按索引對齊,不匹配的位置返回 NaN |
| 支持缺失值 | 使用 NaN 表示缺失數據 |
| 可命名 | 可通過 name 參數設置名稱(常用於轉為 DataFrame 的列名) |
| 索引可重複 | 允許重複索引(但會影響唯一訪問) |
| 不可變大小(默認) | 創建後長度固定,但可通過 append、drop 等生成新對象 |
三、創建 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 函數
六、重要注意事項
-
索引對齊機制 兩個 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 -
NaN 的處理
NaN != NaN,不能用==判斷,應使用isnull()或pd.isna()- 含
NaN的 Series,dtype通常為float64
-
索引可重複,但慎用 重複索引會導致
s['key']返回多個值(Series 而非標量) -
性能提示
- 儘量避免頻繁修改 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》