pin_drop当前位置:知识文库 ❯ 图文
pandas Series创建与操作 - 一维数据结构详解
一、Series概述
Series 是 pandas 中最基础的一维数据结构,类似于一个带标签的数组。它可以存储任何数据类型(整数、浮点数、字符串、Python对象等),每个元素都有一个对应的索引标签,这使得数据访问更加直观和灵活。
Series 是 DataFrame 的构建基础,DataFrame 的每一列本质上就是一个 Series。掌握 Series 的创建和操作,是学习 pandas 的第一步。
二、创建Series的多种方式
1. 从列表创建
最基本的方式是从 Python 列表创建 Series。如果不指定索引,默认使用从 0 开始的整数索引。
代码示例
import pandas as pd
# 从列表创建(默认索引)
s1 = pd.Series([10, 20, 30, 40])
print(s1)
# 0 10
# 1 20
# 2 30
# 3 40
# dtype: int64
# 指定自定义索引
s2 = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
print(s2)
# a 10
# b 20
# c 30
# d 40
# dtype: int642. 从字典创建
从字典创建时,字典的键自动成为索引,值成为数据。
代码示例
# 从字典创建
data = {'苹果': 5.5, '香蕉': 3.2, '橙子': 4.8, '葡萄': 8.0}
s3 = pd.Series(data)
print(s3)
# 苹果 5.5
# 香蕉 3.2
# 橙子 4.8
# 葡萄 8.0
# dtype: float643. 从NumPy数组创建
代码示例
import numpy as np
# 从NumPy数组创建
arr = np.array([1.5, 2.5, 3.5])
s4 = pd.Series(arr, index=['x', 'y', 'z'])
print(s4)
# x 1.5
# y 2.5
# z 3.5
# dtype: float644. 从标量值创建
当传入标量值时,必须提供索引,Series 会将该值广播到所有索引位置。
代码示例
# 从标量值创建(需要指定index)
s5 = pd.Series(0, index=['A', 'B', 'C', 'D'])
print(s5)
# A 0
# B 0
# C 0
# D 0
# dtype: int64三、参数说明
四、Series的属性和方法
常用属性
-
values:返回底层NumPy数组
-
index:返回索引对象
-
dtype:返回数据类型
-
shape:返回形状元组
-
size:返回元素个数
-
name:返回Series名称
常用方法
-
head()/tail():查看前/后N个元素
-
describe():生成描述性统计
-
mean()/sum()/max()/min():统计计算
-
sort_values():按值排序
-
sort_index():按索引排序
五、代码示例
示例1:创建学生成绩Series并查看信息
代码示例
import pandas as pd
# 创建学生成绩Series
scores = pd.Series(
[85, 92, 78, 95, 88, 76, 90],
index=['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九'],
name='数学成绩'
)
print("=== 完整数据 ===")
print(scores)
print("\n=== 前3名 ===")
print(scores.head(3))
print("\n=== 基本信息 ===")
print(f"索引: {scores.index.tolist()}")
print(f"值: {scores.values}")
print(f"数据类型: {scores.dtype}")
print(f"元素个数: {scores.size}")
print(f"名称: {scores.name}")输出:
代码示例
=== 完整数据 ===
张三 85
李四 92
王五 78
赵六 95
钱七 88
孙八 76
周九 90
Name: 数学成绩, dtype: int64
=== 前3名 ===
张三 85
李四 92
王五 78
Name: 数学成绩, dtype: int64
=== 基本信息 ===
索引: ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九']
值: [85 92 78 95 88 76 90]
数据类型: int64
元素个数: 7
名称: 数学成绩示例2:Series统计计算与排序
代码示例
# 统计计算
print(f"最高分: {scores.max()}")
print(f"最低分: {scores.min()}")
print(f"平均分: {scores.mean():.2f}")
print(f"总分: {scores.sum()}")
# 排序
print("\n=== 按分数降序排列 ===")
print(scores.sort_values(ascending=False))
# 描述性统计
print("\n=== 描述性统计 ===")
print(scores.describe())输出:
代码示例
最高分: 95
最低分: 76
平均分: 86.29
总分: 604
=== 按分数降序排列 ===
赵六 95
李四 92
周九 90
钱七 88
张三 85
王五 78
孙八 76
Name: 数学成绩, dtype: int64
=== 描述性统计 ===
count 7.000000
mean 86.285714
std 6.962905
min 76.000000
25% 81.500000
50% 88.000000
75% 91.000000
max 95.000000
Name: 数学成绩, dtype: float64示例3:Series的索引访问与条件筛选
代码示例
# 按索引访问
print("李四的成绩:", scores['李四'])
# 按位置访问
print("第一个元素:", scores.iloc[0])
# 条件筛选
print("\n=== 成绩大于等于90的学生 ===")
print(scores[scores >= 90])
# 多条件筛选
print("\n=== 成绩在80到90之间的学生 ===")
print(scores[(scores >= 80) & (scores <= 90)])
# 使用isin筛选
print("\n=== 指定学生成绩 ===")
print(scores[scores.index.isin(['张三', '李四', '王五'])])六、实际应用场景
-
时间序列数据:用日期作为索引存储每日温度、股票价格等时序数据
-
特征工程:在机器学习中,单个特征列通常以Series形式存在
-
数据聚合结果:groupby操作后返回的结果通常是Series
-
配置映射:用字典创建Series作为代码到名称的映射表
七、注意事项
注意1:Series 的索引可以不唯一,但建议保持唯一性以避免混淆。使用非唯一索引时,访问会返回多个结果。
注意2:当从列表创建Series时,如果数据包含None或np.nan,dtype会自动转换为float64(因为NaN是浮点数)。
注意3:Series 的
iloc始终按整数位置访问,而loc按索引标签访问,不要混淆两者。
小贴士
当从字典创建Series时,如果同时指定了index参数,会以index为准,字典中不在index里的键值会被丢弃,index中但字典里没有的键会填充NaN。
八、Series与列表对比
九、小结
-
Series 是带标签的一维数组,可从列表、字典、NumPy数组或标量值创建
-
索引是Series的核心特性,支持自定义标签和自动对齐运算
-
Series 提供丰富的统计方法和向量化运算能力
-
掌握iloc和loc的区别,避免索引访问时的常见错误
十、练习题
练习1
创建一个Series,索引为2026年1月1日到1月7日(使用 pd.date_range()),值为随机气温(15-35度),计算这周的平均气温、最高温和最低温。
练习2
用字典 {'A': 100, 'B': 200, 'C': 300} 创建Series,然后重新索引为 ['A', 'B', 'C', 'D', 'E'],观察缺失值如何处理。
练习3
创建两个Series:s1 = pd.Series([1, 2, 3], index=['a', 'b', 'c']) 和 s2 = pd.Series([4, 5, 6], index=['b', 'c', 'd']),执行 s1 + s2 运算,观察索引对齐行为。
常见问题
Series 和 Python 列表有什么区别?
Series 有自定义索引标签、支持向量化运算、内置统计方法、自动对齐运算,且原生支持缺失值处理。Python 列表仅支持整数索引,没有向量化运算能力。
如何修改Series的索引?
可以通过 s.index = [...] 直接赋值修改,或使用 s.rename() 方法。使用 reindex() 可以重新索引并引入缺失值。
Series中如何处理缺失值?
使用 isnull() 检测缺失值,dropna() 删除缺失值,fillna(value) 填充缺失值。pandas 中缺失值用 NaN 表示。
为什么两个Series相加会产生NaN?
pandas 在进行算术运算时会按索引对齐。如果某个索引只在其中一个Series中存在,另一个Series中对应位置就是NaN,运算结果也是NaN。
本文涉及AI创作
内容由AI创作,请仔细甄别