Series 基础 #
什么是 Series? #
Series 是 Pandas 的一维数据结构,类似于带标签的一维数组。它可以存储任何数据类型(整数、字符串、浮点数、Python 对象等),每个元素都有一个标签(索引)。
text
┌─────────────────────────────────────────────────────────────┐
│ Series │
├─────────────────────────────────────────────────────────────┤
│ │
│ 索引 值 │
│ ────── ────── │
│ a → 10 │
│ b → 20 │
│ c → 30 │
│ d → 40 │
│ │
│ 特点: │
│ - 一维带标签数组 │
│ - 支持任意数据类型 │
│ - 索引可自定义 │
│ - 支持向量化操作 │
│ │
└─────────────────────────────────────────────────────────────┘
创建 Series #
从列表创建 #
python
import pandas as pd
# 基本创建
s = pd.Series([1, 2, 3, 4, 5])
print(s)
# 0 1
# 1 2
# 2 3
# 3 4
# 4 5
# dtype: int64
# 指定索引
s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
print(s)
# a 1
# b 2
# c 3
# d 4
# e 5
# dtype: int64
# 指定名称
s = pd.Series([1, 2, 3, 4, 5], name='numbers')
print(s.name) # 'numbers'
从字典创建 #
python
# 字典创建
data = {'a': 10, 'b': 20, 'c': 30}
s = pd.Series(data)
print(s)
# a 10
# b 20
# c 30
# dtype: int64
# 指定索引顺序
s = pd.Series(data, index=['c', 'b', 'a'])
print(s)
# c 30
# b 20
# a 10
# dtype: int64
从 NumPy 数组创建 #
python
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
s = pd.Series(arr)
print(s)
# 0 1
# 1 2
# 2 3
# 3 4
# 4 5
# dtype: int64
创建特定类型 Series #
python
# 创建空 Series
s = pd.Series()
print(s) # Series([], dtype: float64)
# 创建标量 Series
s = pd.Series(5, index=['a', 'b', 'c'])
print(s)
# a 5
# b 5
# c 5
# dtype: int64
# 创建日期 Series
dates = pd.date_range('2024-01-01', periods=5)
s = pd.Series([1, 2, 3, 4, 5], index=dates)
print(s)
Series 属性 #
python
s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'], name='data')
# 值(NumPy 数组)
print(s.values) # [1 2 3 4 5]
# 索引
print(s.index) # Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
# 数据类型
print(s.dtype) # int64
# 名称
print(s.name) # 'data'
# 形状
print(s.shape) # (5,)
# 元素个数
print(s.size) # 5
# 维度
print(s.ndim) # 1
# 内存使用
print(s.memory_usage()) # 字节数
索引操作 #
通过标签索引(loc) #
python
s = pd.Series([10, 20, 30, 40, 50], index=['a', 'b', 'c', 'd', 'e'])
# 单个值
print(s['a']) # 10
print(s.loc['a']) # 10
# 多个值
print(s[['a', 'c']])
# a 10
# c 30
# dtype: int64
# 切片(包含结束)
print(s['a':'c'])
# a 10
# b 20
# c 30
# dtype: int64
通过位置索引(iloc) #
python
# 单个值
print(s[0]) # 10
print(s.iloc[0]) # 10
# 多个值
print(s.iloc[[0, 2]])
# a 10
# c 30
# dtype: int64
# 切片(不包含结束)
print(s.iloc[0:3])
# a 10
# b 20
# c 30
# dtype: int64
# 负索引
print(s.iloc[-1]) # 50
布尔索引 #
python
# 条件筛选
print(s[s > 25])
# c 30
# d 40
# e 50
# dtype: int64
# 复合条件
print(s[(s > 20) & (s < 50)])
# c 30
# d 40
# dtype: int64
# isin 方法
print(s[s.isin([10, 30, 50])])
# a 10
# c 30
# e 50
# dtype: int64
常用方法 #
统计方法 #
python
s = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 基本统计
print(s.sum()) # 求和: 55
print(s.mean()) # 平均值: 5.5
print(s.median()) # 中位数: 5.5
print(s.std()) # 标准差
print(s.var()) # 方差
# 最值
print(s.min()) # 最小值: 1
print(s.max()) # 最大值: 10
print(s.idxmin()) # 最小值索引: 0
print(s.idxmax()) # 最大值索引: 9
# 分位数
print(s.quantile(0.25)) # 25% 分位数
print(s.quantile(0.75)) # 75% 分位数
# 累计统计
print(s.cumsum()) # 累计求和
print(s.cumprod()) # 累计乘积
print(s.cummax()) # 累计最大值
print(s.cummin()) # 累计最小值
描述统计 #
python
# 统计摘要
print(s.describe())
# count 10.00000
# mean 5.50000
# std 3.02765
# min 1.00000
# 25% 3.25000
# 50% 5.50000
# 75% 7.75000
# max 10.00000
# dtype: float64
# 唯一值
s = pd.Series(['a', 'b', 'a', 'c', 'b'])
print(s.unique()) # ['a' 'b' 'c']
print(s.nunique()) # 3
print(s.value_counts()) # 值计数
排序 #
python
s = pd.Series([3, 1, 4, 1, 5, 9, 2, 6])
# 按值排序
print(s.sort_values())
# 1 1
# 3 1
# 6 2
# 0 3
# 2 4
# 4 5
# 7 6
# 5 9
# dtype: int64
# 降序
print(s.sort_values(ascending=False))
# 按索引排序
print(s.sort_index())
数学运算 #
python
s = pd.Series([1, 2, 3, 4, 5])
# 基本运算
print(s + 10) # 加法
print(s - 1) # 减法
print(s * 2) # 乘法
print(s / 2) # 除法
print(s ** 2) # 幂运算
print(s % 2) # 取模
# 数学函数
import numpy as np
print(np.sqrt(s)) # 平方根
print(np.log(s)) # 自然对数
print(np.exp(s)) # 指数
# 绝对值
s = pd.Series([-1, 2, -3, 4, -5])
print(s.abs())
字符串方法 #
python
s = pd.Series(['apple', 'banana', 'cherry', 'date'])
# 字符串操作
print(s.str.upper()) # 大写
print(s.str.lower()) # 小写
print(s.str.len()) # 长度
print(s.str.contains('a')) # 包含检测
print(s.str.startswith('a')) # 开头检测
print(s.str.replace('a', 'X')) # 替换
# 正则表达式
print(s.str.extract(r'([aeiou])')) # 提取元音
缺失值处理 #
python
import numpy as np
s = pd.Series([1, 2, np.nan, 4, np.nan, 6])
# 检测缺失值
print(s.isna())
# 0 False
# 1 False
# 2 True
# 3 False
# 4 True
# 5 False
# dtype: bool
print(s.notna()) # 非缺失值
# 填充缺失值
print(s.fillna(0)) # 用 0 填充
print(s.fillna(s.mean())) # 用均值填充
print(s.ffill()) # 前向填充
print(s.bfill()) # 后向填充
# 删除缺失值
print(s.dropna())
# 插值
print(s.interpolate())
Series 运算 #
Series 之间的运算 #
python
s1 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
s2 = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
# 对齐运算
print(s1 + s2)
# a 11
# b 22
# c 33
# dtype: int64
# 不同索引
s3 = pd.Series([100, 200], index=['a', 'd'])
print(s1 + s3)
# a 101.0
# b NaN
# c NaN
# d NaN
# dtype: float64
# 填充缺失值
print(s1.add(s3, fill_value=0))
# a 101.0
# b 2.0
# c 3.0
# d 200.0
# dtype: float64
运算方法 #
python
s1 = pd.Series([1, 2, 3])
s2 = pd.Series([4, 5, 6])
# 算术运算
print(s1.add(s2)) # 加法
print(s1.sub(s2)) # 减法
print(s1.mul(s2)) # 乘法
print(s1.div(s2)) # 除法
print(s1.floordiv(s2)) # 整除
print(s1.mod(s2)) # 取模
print(s1.pow(s2)) # 幂运算
# 比较运算
print(s1.eq(s2)) # 等于
print(s1.ne(s2)) # 不等于
print(s1.gt(s2)) # 大于
print(s1.lt(s2)) # 小于
print(s1.ge(s2)) # 大于等于
print(s1.le(s2)) # 小于等于
Series 方法链 #
python
s = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 链式操作
result = (s
.mul(2) # 乘以 2
.add(5) # 加 5
.loc[lambda x: x > 15] # 筛选
.sort_values(ascending=False) # 排序
)
print(result)
Series 与其他类型转换 #
python
s = pd.Series([1, 2, 3, 4, 5])
# 转换为列表
print(s.tolist())
print(s.to_list())
# 转换为 NumPy 数组
print(s.to_numpy())
# 转换为字典
print(s.to_dict())
# 转换为 DataFrame
df = s.to_frame(name='col')
实用技巧 #
条件赋值 #
python
s = pd.Series([1, 2, 3, 4, 5])
# 条件赋值
s[s > 3] = 100
print(s)
# 0 1
# 1 2
# 2 3
# 3 100
# 4 100
# dtype: int64
应用函数 #
python
s = pd.Series([1, 2, 3, 4, 5])
# apply 方法
print(s.apply(lambda x: x ** 2))
# map 方法
print(s.map({1: 'one', 2: 'two', 3: 'three'}))
# 自定义函数
def transform(x):
if x < 3:
return 'low'
elif x < 5:
return 'medium'
else:
return 'high'
print(s.apply(transform))
滚动窗口 #
python
s = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 滚动平均
print(s.rolling(window=3).mean())
# 滚动求和
print(s.rolling(window=3).sum())
# 扩展窗口
print(s.expanding().mean())
下一步 #
掌握了 Series 基础后,接下来学习 DataFrame 基础,了解 Pandas 的二维数据结构!
最后更新:2026-04-04