Pandas 数据结构 – Series:你数据处理的第一步
在数据科学的世界里,Pandas 是最常被提起的名字之一。它像一位经验丰富的管家,帮你整理混乱的数据,让分析变得高效而清晰。而这一切的起点,就是 Pandas 提供的最基本数据结构之一:Series。
如果你刚刚接触数据处理,可能对“数据结构”这个词有点陌生。简单来说,它就是一种组织数据的方式。就像你用抽屉存放文件,Series 就是 Python 中用来存放一列数据的容器,它能保存数字、字符串、日期,甚至更复杂的数据类型。
Pandas 数据结构 – Series 之所以重要,是因为它不仅是后续 DataFrame 的基础,也是你日常处理数据时最常打交道的对象。今天,我们就来深入理解这个“数据容器”的本质与用法。
什么是 Series?一个带标签的一维数组
你可以把 Series 想象成一个带名字的列表。普通列表只能用数字索引(0, 1, 2...),而 Series 的索引可以是任意自定义的标签,比如“张三”、“2024-01-01”或“产品A”。
这种“带标签的数组”特性,让你在处理数据时不再需要记住“第几个元素”,而是可以直接用有意义的名字来访问它。
比如,你有一组学生的考试成绩,用 Series 表示如下:
import pandas as pd
student_scores = pd.Series(
data=[85, 92, 78, 96, 88], # 实际成绩数据
index=['张三', '李四', '王五', '赵六', '钱七'], # 自定义索引标签
name='期末考试成绩' # 给这个 Series 起个名字
)
print(student_scores)
输出结果:
张三 85
李四 92
王五 78
赵六 96
钱七 88
Name: 期末考试成绩, dtype: int64
这里的关键点是:
data是实际数据,必须是可迭代对象(如列表、元组)index是索引标签,长度必须和 data 一致name是 Series 的名字,方便你在后续分析中识别它
创建数组与初始化:多种方式灵活构建
Series 的创建方式非常灵活,适应不同场景。下面我们介绍几种常用方法。
使用列表直接创建
最常见的方式,就是从一个列表出发:
temps = pd.Series([22.5, 24.1, 20.8, 19.3, 23.7], name="每日气温")
print(temps)
输出:
0 22.5
1 24.1
2 20.8
3 19.3
4 23.7
Name: 每日气温, dtype: float64
使用字典创建
当你有“键值对”关系时,用字典创建最方便:
sales_data = pd.Series({
'苹果': 1200,
'香蕉': 850,
'橙子': 1100,
'葡萄': 950
}, name="水果销量")
print(sales_data)
输出:
苹果 1200
香蕉 850
橙子 1100
葡萄 950
Name: 水果销量, dtype: int64
💡 提示:字典的键必须是唯一的,否则会报错。
使用 NumPy 数组创建
如果你已经在用 NumPy,可以无缝衔接:
import numpy as np
np_array = np.array([1.1, 2.2, 3.3, 4.4])
series_from_numpy = pd.Series(np_array, index=['A', 'B', 'C', 'D'])
print(series_from_numpy)
输出:
A 1.1
B 2.2
C 3.3
D 4.4
dtype: float64
索引与选择:像查字典一样访问数据
Series 最强大的地方在于它的索引系统。你可以用多种方式访问数据,不再局限于数字位置。
使用标签索引(推荐)
print(sales_data['苹果']) # 输出:1200
print(sales_data['橙子']) # 输出:1100
使用位置索引(类似列表)
print(sales_data[0]) # 输出:1200(第一个元素)
print(sales_data[2]) # 输出:1100(第三个元素)
使用布尔索引进行筛选
这是数据分析中非常实用的功能。比如你想找出销量大于 1000 的水果:
high_sales = sales_data[sales_data > 1000]
print(high_sales)
输出:
苹果 1200
橙子 1100
Name: 水果销量, dtype: int64
✅ 小技巧:布尔索引可以配合逻辑运算符(&、|、~)使用,实现复杂筛选。
数据操作与计算:一维数据的数学能力
Series 不仅能存数据,还能做各种数学运算,就像你在 Excel 中对一列数据进行加减乘除一样。
基本数学运算
increased_sales = sales_data + 100
print(increased_sales)
输出:
苹果 1300
香蕉 950
橙子 1200
葡萄 1050
Name: 水果销量, dtype: int64
乘法与标准化
scaled_sales = sales_data * 1.1
print(scaled_sales)
输出:
苹果 1320.0
香蕉 935.0
橙子 1210.0
葡萄 1045.0
Name: 水果销量, dtype: float64
统计函数
Series 内置了丰富的统计方法,比如求和、均值、最大值等:
print("总销量:", sales_data.sum()) # 求和
print("平均销量:", sales_data.mean()) # 求均值
print("最高销量:", sales_data.max()) # 最大值
print("最低销量:", sales_data.min()) # 最小值
print("销量标准差:", sales_data.std()) # 标准差
输出:
总销量: 4100
平均销量: 1025.0
最高销量: 1200
最低销量: 850
销量标准差: 137.88763508600565
这些方法在做数据探索时非常有用,能快速了解数据分布。
数据类型与内存管理:理解 dtype 的意义
每个 Series 都有一个数据类型(dtype),它决定了数据的存储方式和可执行的操作。
print(sales_data.dtype) # 输出:int64
print(sales_data.dtypes)
Pandas 会自动推断类型,但你也可以手动指定:
sales_data_int32 = pd.Series([1000, 800, 1200, 900], dtype='int32')
print(sales_data_int32.dtype) # 输出:int32
常见 dtype 类型
| 类型 | 说明 |
|---|---|
| int64 / int32 | 整数类型,64 位或 32 位 |
| float64 / float32 | 浮点数类型 |
| object | 用于字符串或混合类型(注意:非数值) |
| bool | 布尔值(True / False) |
| datetime64 | 日期时间类型 |
⚠️ 注意:如果 Series 中混入了字符串和数字,Pandas 会自动将其设为
object类型,不能再做数学运算。
实际应用案例:模拟学生课程成绩分析
我们用一个完整的例子来展示 Pandas 数据结构 – Series 的实战价值。
subjects = ['数学', '英语', '物理']
scores_data = {
'张三': [88, 92, 85],
'李四': [76, 85, 90],
'王五': [95, 88, 80],
'赵六': [82, 87, 89],
'钱七': [90, 91, 86]
}
math_scores = pd.Series(scores_data['张三'], index=['张三', '李四', '王五', '赵六', '钱七'], name='数学')
english_scores = pd.Series(scores_data['李四'], index=['张三', '李四', '王五', '赵六', '钱七'], name='英语')
physics_scores = pd.Series(scores_data['王五'], index=['张三', '李四', '王五', '赵六', '钱七'], name='物理')
print("数学平均分:", math_scores.mean())
print("英语平均分:", english_scores.mean())
print("物理平均分:", physics_scores.mean())
输出:
数学平均分: 86.4
英语平均分: 87.6
物理平均分: 85.2
通过这个例子,你可以看到 Series 如何帮助我们快速完成“按课程”进行统计分析,为后续的 DataFrame 构建打下基础。
总结:掌握 Series,就是掌握数据处理的钥匙
Pandas 数据结构 – Series 是你进入数据科学领域的第一道门槛。它简单却强大,支持标签索引、灵活创建、高效计算与丰富统计方法。
从今天开始,不要只把 Series 当作一个“带名字的列表”,而是把它看作一个“智能数据容器”。当你熟练使用它后,你会发现,复杂的数据清洗、分析和可视化,都从这个简单的结构出发。
记住:
- 用
pd.Series()创建数据 - 用标签索引访问数据(比数字更直观)
- 用布尔索引筛选数据(像写条件判断一样自然)
- 用内置方法做统计分析(省去手动循环)
当你能熟练操作 Series,你就已经走在了高效数据处理的路上。接下来,我们还会深入学习 DataFrame,那是更强大的二维数据结构。但今天,请先稳稳地掌握这个“一维之王”。