虽然像 NumPy 的 ndarray 这样强大的数组结构常用于数值计算,但许多数据不仅仅是原始数字;它们带有标签和结构。例如,随时间变化的股票价格、来自不同位置的传感器读数,或者调查受访者的人口统计信息。这就是 Pandas 发挥作用的地方,它用于一维数据的基本数据结构是 Series。可以将 Series 想象成电子表格中的单个列,或者 Python 列表或 NumPy 数组的更高级版本。它本质上是一个一维的类数组对象,包含一系列值和一组相关的数据标签数组,称为其 索引。Series 的结构Pandas Series 有两个主要组成部分:值: 这是一系列数据点。在底层,这些值通常存储在 NumPy ndarray 中,这使得对其进行操作既快速又高效。Series 中的值通常具有相同的数据类型(如整数、浮点数、字符串或 Python 对象)。索引: 这是一组与值对应的标签数组。与主要使用基于整数的索引(0, 1, 2, ...)的 NumPy 数组不同,Pandas Series 有一个显式 索引。此索引可以由整数组成,但也可以由字符串、日期或其他 Python 对象构成。如果您在创建 Series 时未指定索引,Pandas 会自动创建一个默认的整数索引,范围从 0 到 $N-1$,其中 $N$ 是值的数量。这里是一个简单的可视化表示:digraph G { rankdir=LR; node [shape=record, style=filled, fillcolor="#e9ecef"]; edge [arrowhead=none]; series [label="{ <idx> 索引 | <val> 值 }"]; idx_labels [label="{ 'Mon' | 'Tue' | 'Wed' | 'Thu' | 'Fri' }", fillcolor="#a5d8ff"]; val_data [label="{ 22.5 | 23.1 | 21.9 | 22.8 | 23.5 }", fillcolor="#b2f2bb"]; series:idx -> idx_labels [label="标签"]; series:val -> val_data [label="数据"]; subgraph cluster_index { label = "索引对象"; style=dashed; color="#adb5bd"; idx_labels; } subgraph cluster_values { label = "NumPy 数组(通常)"; style=dashed; color="#adb5bd"; val_data; } }Pandas Series 将值数组(通常是 NumPy 数组)与一个用于标记的显式索引对象结合起来。带标签数据的重要性显式索引是 Pandas Series 的一个重要特性。相比仅使用普通的 NumPy 数组,它提供了几个优势:直观访问: 您可以使用有意义的标签(如日期或类别名称)访问数据点,而不是仅仅通过整数位置。例如,获取“周三”的温度通常比记住它在索引位置 2 更直观。数据对齐: 在多个 Series 之间执行操作时,Pandas 会根据索引标签自动对齐数据。这可以防止在使用无序或不同顺序的数据时出现的许多常见错误。灵活性: 相比简单的整数索引,索引允许更复杂的选择和处理逻辑。可以将 Series 看作是通过增加这一层有意义的标签来增强 NumPy 数组。它保留了 NumPy 对底层值的计算效率,同时提供了一种更灵活、内容更丰富的结构,适合数据分析。在下一节中,我们将介绍在 Python 中创建这些 Series 对象的实用方法。