当前位置: 首页 > ai >正文

【Python自动化】 21.3 Pandas Series 核心数据结构完全指南

一、Series 概述

什么是 Series?

Series 是 Pandas 两大核心数据结构之一(另一个是 DataFrame),是构建 DataFrame 的基础。

核心特征
  • 带标签的一维数组
  • 可保存任何类型数据(整数、字符串、浮点数、Python对象等)
  • 由两个主要部分组成:
    • 数据值:存储的实际数据
    • 索引:与数据值相关联的标签

二、创建 Series 的四种方式

1. 从列表创建(最基本方式)
import pandas as pd# 创建简单 Series,使用默认索引
data = [10, 20, 30, 40]
s = pd.Series(data)
print(s)

输出:

0    10
1    20
2    30
3    40
dtype: int64
2. 指定自定义索引
# 创建时指定自定义索引
data = [10, 20, 30, 40]
custom_index = ['a', 'b', 'c', 'd']
s = pd.Series(data, index=custom_index)
print(s)

输出:

a    10
b    20
c    30
d    40
dtype: int64
3. 从字典创建(自动索引匹配)
# 字典键自动成为索引,字典值成为数据
data_dict = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
s = pd.Series(data_dict)
print(s)

输出:

a    10
b    20
c    30
d    40
dtype: int64
4. 从标量创建(复制值)
# 单个标量值 + 索引,值会被复制
s = pd.Series(5, index=['a', 'b', 'c', 'd'])
print(s)

输出:

a    5
b    5
c    5
d    5
dtype: int64

三、Series 基本操作

查看索引和数据值
s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])print(s.index)   # 输出:Index(['a', 'b', 'c', 'd'], dtype='object')
print(s.values)  # 输出:[10 20 30 40]
print(s.dtype)   # 输出:int64
索引访问数据
# 通过标签索引访问
print(s['a'])  # 输出:10# 通过位置索引访问
print(s[0])    # 输出:10# 访问多个元素
print(s[['a', 'c']])

输出:

a    10
c    30
dtype: int64
切片操作
# 基于位置的切片(不包括结束位置)
print(s[0:2])  # 输出:a=10, b=20# 基于标签的切片(包括结束位置)
print(s['a':'c'])  # 输出:a=10, b=20, c=30

四、向量化操作与数据过滤

向量化数学运算
s = pd.Series([1, 2, 3, 4])print(s + 5)   # 每个元素加5
print(s * 2)   # 每个元素乘2
print(s > 2)   # 布尔判断

输出:

0    6
1    7
2    8
3    9
dtype: int640    2
1    4
2    6
3    8
dtype: int640    False
1    False
2     True
3     True
dtype: bool
布尔条件过滤
s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
filtered_s = s[s > 25]  # 筛选值大于25的元素
print(filtered_s)

输出:

c    30
d    40
dtype: int64

五、索引对齐特性(重要!)

索引对齐运算
s1 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
s2 = pd.Series([4, 5, 6], index=['b', 'c', 'd'])result = s1 + s2  # 按索引标签对齐,不是按位置!
print(result)

输出:

a    NaN  # s1有'a',s2没有 → NaN
b    6.0  # s1['b'](2) + s2['b'](4) = 6
c    8.0  # s1['c'](3) + s2['c'](5) = 8
d    NaN  # s2有'd',s1没有 → NaN
dtype: float64

六、常用属性和方法

数据查看方法
s = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])print(s.head(3))    # 查看前3行
print(s.tail(3))    # 查看后3行
print(s.describe()) # 描述性统计
数据处理方法
# 唯一值和频次统计
s = pd.Series(['a', 'b', 'a', 'c', 'b', 'a'])
print(s.unique())       # 输出:['a' 'b' 'c']
print(s.value_counts()) # 输出:a=3, b=2, c=1# 空值处理
s_with_nan = pd.Series([1, 2, None, 4])
print(s_with_nan.isna())    # 检查空值
print(s_with_nan.dropna())  # 删除空值
print(s_with_nan.fillna(0)) # 填充空值
排序方法
s = pd.Series([3, 1, 4, 2], index=['d', 'a', 'c', 'b'])print(s.sort_values())  # 按值排序
print(s.sort_index())   # 按索引排序

七、字典式操作方法

类似字典的操作
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])# 检查索引存在性
print('a' in s)  # 输出:True
print('x' in s)  # 输出:False# 安全获取值
print(s.get('x', 0))  # 索引不存在时返回0
print(s.get('a', 0))  # 索引存在时返回值

八、综合示例

实际应用场景
# 创建学生成绩Series
grades = pd.Series([85, 92, 78, 90], index=['Alice', 'Bob', 'Charlie', 'Diana'],name='Math_Scores')# 基本分析
print("平均分:", grades.mean())
print("最高分:", grades.max())
print("最低分:", grades.min())# 条件筛选
good_students = grades[grades > 85]
print("85分以上的学生:")
print(good_students)# 添加新数据
grades['Eve'] = 88
print("添加新学生后的成绩单:")
print(grades)

九、总结对比

特性描述
本质带标签的一维数组
组成数据值 + 索引
创建方式列表、字典、标量
核心操作索引访问、向量化运算、布尔过滤
核心特性索引对齐:运算时按标签对齐,而非位置
主要用途数据分析、数据清洗、作为DataFrame的单列

十、最佳实践建议

  1. 明确指定索引:避免依赖默认整数索引
  2. 利用向量化操作:避免使用循环,提高性能
  3. 注意索引对齐:理解Series运算的底层机制
  4. 合理使用数据类型:选择合适的数据类型节省内存
  5. 熟练掌握常用方法value_counts(), isna(), fillna()

Series 是 Pandas 的基石,熟练掌握它是有效使用 Pandas 进行数据分析的关键第一步。

http://www.xdnf.cn/news/20169.html

相关文章:

  • 如何使显示器在笔记本盖上盖子时还能正常运转
  • windows找不到gpedit.msc(本地组策略编辑器)
  • Docker容器安全最佳实践:镜像扫描、权限控制与逃逸防范
  • Pie Menu Editor V1.18.7.exe 怎么安装?详细安装教程(附安装包)​
  • [linux仓库]性能加速的隐形引擎:深度解析Linux文件IO中的缓冲区奥秘
  • Java并发锁相关
  • LeetCode - 202. 快乐数
  • 深度学习——数据增强(Data Augmentation)
  • HTML HTML基础(2)
  • 数控机床中,进行前瞻速度规划时,根据几何约束限制计算的拐角过渡速度
  • HTML基础(决定页面结构)
  • MQTT 与 Java 框架集成:Spring Boot 实战(一)
  • 【GEOS-Chem伴随模型第二期】GEOS-Chem Adjoint 安装与配置
  • 2025年互联网行业高含金量证书盘点!
  • leetcode 2749. 得到整数零需要执行的最少操作数 中等
  • 邪修实战系列(1)
  • 使用CI/CD部署项目(前端Nextjs)
  • SQL Server事务隔离级别
  • JavaScript 面向对象 原型和原型链 继承
  • 西嘎嘎学习-day 1
  • 栈:有效的括号
  • Dify-CHATflow案例
  • JS中的String的常用方法
  • Process Explorer 学习笔记(第三章3.2.3):工具栏与参考功能
  • 知微集:Python中的线程(三)
  • JavaScript 中的并发编程实践与误区:一次深入的探讨
  • 软考高级 — 系统规划与管理师考试知识点精要
  • 电脑活动追踪全解析:六款软件助企业实现数字化精细管理
  • whl编译命令作用解释
  • 【完整源码+数据集+部署教程】加工操作安全手套与手部检测系统源码和数据集:改进yolo11-cls