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: int64

2. 从字典创建

从字典创建时,字典的自动成为索引,成为数据。

代码示例

# 从字典创建
data = {'苹果': 5.5, '香蕉': 3.2, '橙子': 4.8, '葡萄': 8.0}
s3 = pd.Series(data)
print(s3)
# 苹果    5.5
# 香蕉    3.2
# 橙子    4.8
# 葡萄    8.0
# dtype: float64

3. 从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: float64

4. 从标量值创建

当传入标量值时,必须提供索引,Series 会将该值广播到所有索引位置。

代码示例

# 从标量值创建(需要指定index)
s5 = pd.Series(0, index=['A', 'B', 'C', 'D'])
print(s5)
# A    0
# B    0
# C    0
# D    0
# dtype: int64

三、参数说明

参数 类型 说明
data array-like, dict, scalar 数据源,可以是列表、字典、NumPy数组或标量值
index array-like, Index 索引标签,默认RangeIndex(0,1,2,...)
dtype str, numpy.dtype, ExtensionDtype 数据类型,未指定时自动推断
name str, optional 给Series命名,便于识别
copy bool, default False 是否复制输入数据,避免修改原始数据

四、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 Python 列表
索引 自定义标签索引 仅整数索引
数据类型 统一dtype(可混合对象) 可混合任意类型
向量化运算 支持 不支持
缺失值处理 原生支持NaN 需用None表示
统计方法 内置mean/sum等 需手动计算
对齐运算 自动按索引对齐 按位置对齐

九、小结

  • 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。

标签: Series pandas教程 一维数据 索引操作 数据创建 Python

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: pandas库简介 - Python数据分析入门指南 下一篇: pandas DataFrame创建 - 二维数据结构全解析

poll相关推荐