pandas是Python中一个非常流行的数据处理库,它提供了很多方便的数据结构和工具,让我们能够轻松地处理表格数据、时间序列数据等。在pandas中,最基础也最常用的数据结构之一就是Series。可以把Series理解为“带有标签的一维数组”——它不仅包含数据本身,还包含了一个用来标识每个数据点的“标签”(也就是我们常说的“索引”)。

一、创建Series

要使用Series,首先需要导入pandas库,通常我们会简写为import pandas as pd。下面是几种常见的创建方式:

1. 从列表创建(默认索引)

如果我们有一个普通的Python列表,就可以直接把它传给pd.Series()来创建一个Series。例如:

import pandas as pd

# 定义一个列表
data = [10, 20, 30, 40]
# 创建Series(默认索引是0,1,2,3)
s = pd.Series(data)
print(s)

输出结果:

0    10
1    20
2    30
3    40
dtype: int64

这里左边的数字(0,1,2,3)就是Series的索引(默认从0开始),右边的是数据。如果需要给Series命名,可以用name参数:

s = pd.Series(data, name="成绩")
print(s)

输出会在索引上方显示Name: 成绩

2. 从字典创建(键作为索引)

如果数据是键值对形式(比如Python字典),pd.Series()会自动把字典的键作为索引,值作为数据。例如:

data_dict = {"语文": 90, "数学": 85, "英语": 95, "物理": 80}
s = pd.Series(data_dict)
print(s)

输出结果:

语文    90
数学    85
英语    95
物理    80
dtype: int64

这里的索引就是字典的键(语文、数学等),数据是对应的值。

3. 从标量值创建(重复生成)

如果想创建一个所有元素都是同一个值的Series,可以传入一个标量和长度参数。例如,创建一个长度为5、值为10的Series:

s = pd.Series(10, range(5))  # 用range(5)指定索引为0-4
print(s)

输出:

0    10
1    10
2    10
3    10
4    10
dtype: int64

二、Series的基本属性

每个Series都有几个核心属性,帮助我们了解它的结构:
- values:获取Series的数据本身(返回numpy数组)

  print(s.values)  # 例如:[90 85 95 80]
  • index:获取Series的索引(标签)
  print(s.index)  # 例如:Index(['语文', '数学', '英语', '物理'], dtype='object')
  • name:Series的名称(如果创建时指定了name参数)
  print(s.name)  # 例如:"成绩"
  • shape:返回形状(一维Series的shape是(长度,))
  print(s.shape)  # 例如:(4,)(4个元素)

三、索引的理解与操作

索引是Series的“灵魂”,它让我们能通过标签快速定位数据。

1. 自定义索引

默认索引是0,1,2…,但我们可以自定义索引(如字符串、日期等),让数据更易读。例如:

dates = ["周一", "周二", "周三", "周四", "周五"]
sales = [150, 200, 180, 220, 190]
s = pd.Series(sales, index=dates, name="销售额(元)")
print(s)

输出:

周一    150
周二    200
周三    180
周四    220
周五    190
Name: 销售额, dtype: int64

2. 通过索引访问数据

  • 按标签访问(loc):已知标签时,用loc获取数据。例如:
  print(s.loc["周三"])  # 输出:180(获取标签为"周三"的数据)
  • 按位置访问(iloc):已知位置时,用iloc获取数据。例如:
  print(s.iloc[2])  # 输出:180(获取第2个位置的数据,即第三个元素)

3. 切片操作

  • 标签切片(包含结束标签):用loc,例如:
  print(s.loc["周二":"周四"])  # 输出周二:200, 周三:180, 周四:220
  • 位置切片(不包含结束位置):用iloc,例如:
  print(s.iloc[1:4])  # 输出周二:200, 周三:180, 周四:220

4. 修改索引

索引不可直接修改单个元素,但可以整体替换:

s.index = ["Mon", "Tue", "Wed", "Thu", "Fri"]  # 替换所有索引
print(s)

四、数据操作与分析

1. 基本统计方法

Series内置了求和、均值、最大值等统计方法:

s = pd.Series([10, 20, 30, 40])
print(s.sum())   # 100(求和)
print(s.mean())  # 25.0(均值)
print(s.max())   # 40(最大值)

2. 条件筛选

通过布尔条件筛选数据:

s = pd.Series([10, 20, 30, 40])
filtered = s[s > 25]  # 筛选出大于25的数据
print(filtered)  # 输出:30, 40

五、实战案例:综合练习

假设我们要记录某商店一周的客流量,用Series存储并分析:

import pandas as pd

# 1. 创建带日期索引的客流量Series
days = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
passengers = [500, 480, 520, 600, 550, 700, 650]
s = pd.Series(passengers, index=days, name="客流量")

# 2. 查看数据
print("=== 一周客流量数据 ===")
print(s)

# 3. 按标签访问周六客流量
print("\n周六客流量:", s.loc["周六"])  # 输出:700

# 4. 计算总客流量和平均客流量
total = s.sum()
avg = s.mean()
print(f"\n总客流量:{total}人,平均每天:{avg:.1f}人")

# 5. 筛选客流量超过600人的日期
busy_days = s[s > 600]
print("\n客流量超过600人的日期:")
print(busy_days)

输出结果:

=== 一周客流量数据 ===
周一    500
周二    480
周三    520
周四    600
周五    550
周六    700
周日    650
Name: 客流量, dtype: int64

周六客流量 700

总客流量4050平均每天578.6

客流量超过600人的日期
周六    700
周日    650
dtype: int64

总结

Series是pandas中最基础的数据结构,掌握它是数据处理的关键。核心要点:
- Series = 数据 + 标签(索引),索引让数据更易管理
- 支持列表、字典、标量创建,灵活适配数据来源
- 用loc(标签)和iloc(位置)访问数据,避免混淆
- 内置统计和筛选方法,快速实现数据初步分析

多动手尝试不同场景(如用日期索引、字符串索引),熟悉索引操作和数据处理逻辑,就能逐步掌握Series的使用。

小夜