0

0

高效计算 Pandas DataFrame 中逐行向量的百分比变化

心靈之曲

心靈之曲

发布时间:2026-03-08 09:43:01

|

199人浏览过

|

来源于php中文网

原创

高效计算 Pandas DataFrame 中逐行向量的百分比变化

本文介绍如何对包含向量(如列表)的 pandas series 或 dataframe 进行逐行百分比变化(pct_change)计算,推荐使用 dataframe 作为中间结构以提升可读性、性能与健壮性,并提供简洁、可扩展的实现方案。

本文介绍如何对包含向量(如列表)的 pandas series 或 dataframe 进行逐行百分比变化(pct_change)计算,推荐使用 dataframe 作为中间结构以提升可读性、性能与健壮性,并提供简洁、可扩展的实现方案。

在数据分析中,常需对每行代表一个特征向量(例如时间序列快照、嵌入向量或传感器多通道读数)的数据进行相对变化分析。若原始数据以 pd.Series 形式存储嵌套列表(如 [[1,2,3], [4,5,6], [7,8,9]]),直接对“行间向量”做逐元素百分比变化(即当前行各元素除以下一行对应元素后减 1),容易陷入嵌套循环或冗余列表推导,既低效又易出错。

核心原则:避免在 Series 中存储可变对象(如 list)
Pandas 并非为处理「Series of lists」而优化——这类结构丧失向量化能力、无法利用底层 NumPy 运算,且 pct_change() 等方法默认不支持嵌套结构。正确做法是先展开为标准二维 DataFrame,再调用原生向量化方法。

✅ 推荐方案(两步法,清晰高效):

Clipfly
Clipfly

一站式AI视频生成和编辑平台,提供多种AI视频处理、AI图像处理工具。

下载
import pandas as pd

# 原始数据:Series of lists
a = pd.Series([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# Step 1: 转为 DataFrame(自动按列展开)
df = pd.DataFrame(a.tolist())
#    0  1  2
# 0  1  2  3
# 1  4  5  6
# 2  7  8  9

# Step 2: 沿行方向计算「相对于下一行」的百分比变化(periods=-1)
# 结果为 DataFrame,每单元格为 (current - next) / next
pct_df = df.pct_change(periods=-1)
#           0      1         2
# 0 -0.750000 -0.600 -0.500000
# 1 -0.428571 -0.375 -0.333333
# 2       NaN    NaN       NaN

# Step 3(可选):若必须返回 Series of lists
result_series = pct_df.agg(list, axis=1)
# 0                                  [-0.75, -0.6, -0.5]
# 1    [-0.4285714285714286, -0.375, -0.3333333333333...
# 2                                      [nan, nan, nan]
# dtype: object

? 关键参数说明:

  • pct_change(periods=-1) 表示用 row[i] 相对于 row[i+1] 计算变化率(即 (x_i - x_{i+1}) / x_{i+1}),等价于 df.div(df.shift(-1)).sub(1),但更语义明确、数值稳定。
  • agg(list, axis=1) 将每行聚合为 Python 列表,适用于需保持原始 Series 结构的下游任务(如 JSON 序列化)。但注意:此举会丢失向量化优势,应仅在必要时使用。

⚠️ 注意事项:

  • 空值与边界处理:最后一行无“下一行”,结果自动为 NaN;若某列存在 0 或 None,对应位置将产生 inf、-inf 或 NaN,建议前置清洗:df.replace({0: pd.NA}).pct_change(-1)。
  • 性能提示:对万级以上行数,避免 a.apply(lambda x: [...]) 或双重列表推导;DataFrame 展开 + 向量化操作通常快 10–100 倍。
  • 类型安全:确保所有子列表长度一致,否则 pd.DataFrame(a.tolist()) 会报错;可用 assert all(len(x) == len(a.iloc[0]) for x in a) 验证。

? 总结:
不要对抗 Pandas 的设计范式。当数据本质是二维(N 行 × M 维向量)时,就该用 DataFrame 承载。通过 .tolist() → pd.DataFrame() → .pct_change() → .agg(list) 四步链式调用,即可在保持代码简洁性的同时,获得最佳性能与可维护性。这是处理“向量型时间序列变化率”的标准实践。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

453

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

331

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

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

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

78

2025.12.04

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

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

12

2026.01.31

lambda表达式
lambda表达式

Lambda表达式是一种匿名函数的简洁表示方式,它可以在需要函数作为参数的地方使用,并提供了一种更简洁、更灵活的编码方式,其语法为“lambda 参数列表: 表达式”,参数列表是函数的参数,可以包含一个或多个参数,用逗号分隔,表达式是函数的执行体,用于定义函数的具体操作。本专题为大家提供lambda表达式相关的文章、下载、课程内容,供大家免费下载体验。

214

2023.09.15

python lambda函数
python lambda函数

本专题整合了python lambda函数用法详解,阅读专题下面的文章了解更多详细内容。

192

2025.11.08

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

23

2026.03.06

热门下载

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

精品课程

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

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