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