跳到主要内容

pandas Series 数据结构

Series 本质上是带 Index 的一维数组。值有数据类型(dtype),标签用于标识和对齐。这种基于标签的对齐机制,是它区别于普通 Python 列表或 NumPy 数组的关键所在。

import pandas as pd

scores = pd.Series(
[91, 84, pd.NA],
index=["Ada", "Lin", "Sam"],
name="score",
dtype="Int64",
)

核心概念

  • scores.array:底层数据存储。在适用场景下,使用 pandas 扩展数组(Extension Array)。
  • scores.index:存储标签。标签可以是字符串、日期等,不必是连续整数。
  • scores.name:序列名称。在转为 DataFrame 或参与表格操作时,通常作为列名。
  • scores.dtype:决定数据的存储格式及缺失值处理方式。

注意:不要依赖 pandas 自动推断的 dtype。推断结果可能受输入数据或 pandas 版本影响。在处理字符串、可空整数、布尔值或日期时,若需特定表示,务必在创建时显式指定 dtype。

构造与对齐

根据需求选择构造方式:

  • 顺序优先:从列表/序列构造。
  • 标签优先:从字典/映射构造。
left = pd.Series({"a": 10, "b": 20})
right = pd.Series({"b": 1, "c": 2})

left + right
# 结果:a -> NA, b -> 21, c -> NA

left.add(right, fill_value=0)
# 结果:a -> 10, b -> 21, c -> 2

算术运算默认按标签对齐,而非按物理位置。这很强大,但如果两个 Series 的索引不一致,可能会静默产生缺失值。在索引关系至关重要时,建议先检查索引或显式处理对齐逻辑。

缺失值处理

判断缺失值请使用 isna()notna()严禁使用 == 进行相等比较。

缺失值的底层表示取决于 dtype,可能是 pd.NANaNNaT。代码中应统一使用 pandas 提供的缺失值 API,不要直接依赖具体的标量哨兵值。

选型建议

  • 用 NumPy:当任务纯粹是基于位置的同质数值计算时。
  • 用 Series:当需要标签索引、可空数据类型、自动对齐或参与 pandas 表格操作时。

参考资料

探索关联打开关联网络