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的使用。