0

0

使用 Pandas 高效为 Series 赋值序列号

聖光之護

聖光之護

发布时间:2025-11-02 14:17:01

|

773人浏览过

|

来源于php中文网

原创

使用 Pandas 高效为 Series 赋值序列号

本教程将探讨在 pandas 中如何以“pandas 方式”高效地将 series 的现有值替换为从1开始的递增序列号。我们将介绍利用 `range` 或 `numpy.arange` 进行直接赋值的简洁方法,避免使用传统的循环迭代,从而提升代码的可读性和执行效率,使数据操作更符合 pandas 的设计哲学。

在数据处理和分析中,我们经常需要对 Pandas Series 中的值进行批量修改。一个常见的需求是将 Series 的现有值替换为一系列递增的序列号,例如 1, 2, 3...。对于初学者而言,可能会习惯性地采用 Python 的循环结构来逐个修改 Series 元素,但这并非处理 Pandas 数据的最佳实践。

循环迭代的局限性

考虑以下初始化一个 Pandas Series 的例子:

import pandas as pd
import numpy as np

rank = pd.Series(data=[161.140890, 146.989804, 133.589100, 131.220764, 124124.506911],
                 index=['SB', 'EKDKQ', 'APD', 'DIS', 'MDR'])
print("原始 Series:")
print(rank)

输出:

原始 Series:
SB       161.140890
EKDKQ    146.989804
APD      133.589100
DIS      131.220764
MDR      124124.506911
dtype: float64

如果使用传统的循环方式来替换值,代码可能如下所示:

x = 1
for i, v in rank.items():
    rank.loc[i] = x
    x += 1
print("\n使用循环替换后的 Series:")
print(rank)

输出:

使用循环替换后的 Series:
SB       1.0
EKDKQ    2.0
APD      3.0
DIS      4.0
MDR      5.0
dtype: float64

虽然这段代码实现了目标,但它本质上是 Python 原生循环,而非充分利用 Pandas 或 NumPy 的向量化操作能力。对于大型 Series,这种逐元素迭代的方式效率较低,且代码风格不够“Pandas”。

采用“Pandas 方式”进行高效赋值

Pandas 的核心优势在于其基于 NumPy 的向量化操作,能够以极高的效率处理整个数组或 Series。要将 Series 的值替换为序列号,我们应该生成一个序列,然后直接将其赋值给 Series。

方法一:利用 range 函数直接赋值

Python 内置的 range() 函数可以生成一个整数序列。结合 Series 的 size 属性(表示 Series 中元素的数量),我们可以轻松生成所需长度的序列。

AIBox 一站式AI创作平台
AIBox 一站式AI创作平台

AIBox365一站式AI创作平台,支持ChatGPT、GPT4、Claue3、Gemini、Midjourney等国内外大模型

下载
# 重新初始化 Series 以便演示
rank = pd.Series(data=[161.140890, 146.989804, 133.589100, 131.220764, 124124.506911],
                 index=['SB', 'EKDKQ', 'APD', 'DIS', 'MDR'])

# 使用 range 生成序列并直接赋值
# range(start, stop) 会生成从 start 到 stop-1 的序列
# rank.size 获取 Series 的元素数量,因此我们需要 rank.size + 1 来包含最后一个数字
rank[:] = range(1, rank.size + 1)

print("\n使用 range 直接赋值后的 Series:")
print(rank)

输出:

使用 range 直接赋值后的 Series:
SB       1.0
EKDKQ    2.0
APD      3.0
DIS      4.0
MDR      5.0
dtype: float64

这里,rank[:] 表示选择 Series 的所有元素,并将其整体替换为 range(1, rank.size + 1) 生成的序列。这种操作是原地修改,效率远高于循环。

方法二:利用 numpy.arange 函数直接赋值

NumPy 库提供了功能更强大的 arange() 函数,与 range() 类似,但可以处理浮点数步长,并且返回的是 NumPy 数组,与 Pandas 结合更紧密。

# 重新初始化 Series 以便演示
rank = pd.Series(data=[161.140890, 146.989804, 133.589100, 131.220764, 124124.506911],
                 index=['SB', 'EKDKQ', 'APD', 'DIS', 'MDR'])

# 使用 numpy.arange 生成序列并直接赋值
# np.arange(start, stop) 同样生成从 start 到 stop-1 的序列
rank[:] = np.arange(1, rank.size + 1)

print("\n使用 numpy.arange 直接赋值后的 Series:")
print(rank)

输出:

使用 numpy.arange 直接赋值后的 Series:
SB       1.0
EKDKQ    2.0
APD      3.0
DIS      4.0
MDR      5.0
dtype: float64

numpy.arange 的用法与 range 类似,但在处理数值序列时提供了更大的灵活性。由于 Pandas Series 的底层数据结构通常是 NumPy 数组,使用 numpy.arange 生成的数组可以直接高效地赋值给 Series。

优势与最佳实践

  • 效率显著提升: range 和 numpy.arange 结合直接赋值是向量化操作,避免了 Python 解释器的循环开销,底层通过 C 语言或优化过的 NumPy 代码执行,效率远高于显式循环,尤其对于大数据集。
  • 代码简洁明了: 一行代码即可完成替换,提高了代码的可读性和维护性。
  • 符合 Pandas 风格: 这种方式充分利用了 Pandas 的设计哲学,即通过向量化操作来处理数据,是处理 Pandas 数据的推荐方式。
  • 原地修改: rank[:] = ... 这种赋值方式会直接修改原有的 Series 对象,而不是创建一个新的 Series。如果需要保留原始 Series,应先进行复制(例如 rank.copy())。

在选择 range 或 numpy.arange 时,对于简单的整数序列生成,两者性能差异不大。如果项目中已经引入了 NumPy,或者未来可能需要生成更复杂的数值序列(如浮点数步长),那么 numpy.arange 可能是更一致的选择。

总结

将 Pandas Series 的值替换为序列号时,应避免使用传统的 Python 循环,而是采用向量化操作。通过利用 Python 内置的 range() 函数或 NumPy 提供的 numpy.arange() 函数生成序列,然后直接赋值给 Series,可以实现高效、简洁且符合 Pandas 风格的数据操作。这种方法不仅提升了代码执行效率,也增强了代码的可读性和可维护性,是处理 Pandas 数据的最佳实践之一。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

81

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

33

2026.01.31

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

550

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

30

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

45

2026.01.06

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

550

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

30

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

45

2026.01.06

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号