Pandas 数据结构 – Series(详细教程)

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,那是更强大的二维数据结构。但今天,请先稳稳地掌握这个“一维之王”。