Python Pandas 中的 shift() 函数,实现数据平移的完美利器!

2987fd07e05184fc706feae255aca7a7.jpeg

更多Python学习内容:ipengtao.com

shift() 是 Pandas 中一个常用的数据处理函数,它用于对数据进行移动或偏移操作,常用于时间序列数据或需要计算前后差值的情况。本文将详细介绍 shift() 函数的用法,包括语法、参数、示例以及常见应用场景。

什么是 shift() 函数?

shift() 函数是 Pandas 库中的一个数据处理函数,用于将数据按指定方向移动或偏移。它可以对时间序列数据或其他类型的数据进行操作,通常用于计算时间序列数据的差值、百分比变化等。该函数的主要作用是将数据移动到指定的行或列,留下空白或填充 NaN 值。

shift() 函数的语法

shift() 函数的基本语法如下:

DataFrame.shift(periods=1, freq=None, axis=0, fill_value=None)

参数说明:

  • periods:指定移动的步数,可以为正数(向下移动)或负数(向上移动)。默认为 1。

  • freq:可选参数,用于指定时间序列数据的频率,通常用于时间序列数据的移动操作。

  • axis:指定移动的方向,可以为 0(默认,沿行移动)或 1(沿列移动)。

  • fill_value:可选参数,用于填充移动后留下的空白位置,通常为填充 NaN 值。

shift() 函数的示例

通过一些示例来演示 shift() 函数的用法。

示例 1:向下移动数据

import pandas as pddata = {'A': [1, 2, 3, 4, 5],'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)# 向下移动一行数据
df_shifted = df.shift(periods=1)
print(df_shifted)

输出结果:

A     B
0  NaN   NaN
1  1.0  10.0
2  2.0  20.0
3  3.0  30.0
4  4.0  40.0

在这个示例中,创建了一个包含两列数据的 DataFrame,并使用 shift() 函数向下移动了一行数据。移动后,第一行的数据被填充为 NaN。

示例 2:向上移动数据

import pandas as pddata = {'A': [1, 2, 3, 4, 5],'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)# 向上移动一行数据
df_shifted = df.shift(periods=-1)
print(df_shifted)

输出结果:

A     B
0  2.0  20.0
1  3.0  30.0
2  4.0  40.0
3  5.0  50.0
4  NaN   NaN

这个示例,使用负数的 periods 参数将数据向上移动了一行。最后一行的数据被填充为 NaN。

示例 3:向右移动列数据

import pandas as pddata = {'A': [1, 2, 3, 4, 5],'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)# 向右移动一列数据
df_shifted = df.shift(periods=1, axis=1)
print(df_shifted)

输出结果:

A     B
0  NaN   1.0
1  NaN   2.0
2  NaN   3.0
3  NaN   4.0
4  NaN   5.0

在这个示例中,使用 axis=1 参数将列数据向右移动了一列,左边填充为 NaN。

示例 4:指定填充值

import pandas as pddata = {'A': [1, 2, 3, 4, 5],'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)# 向下移动一行数据,填充空白处为 0
df_shifted = df.shift(periods=1, fill_value=0)
print(df_shifted)

输出结果:

A   B
0  0   0
1  1  10
2  2  20
3  3  30
4  4  40

在这个示例中,使用 fill_value 参数指定了填充值为 0,因此移动后的空白位置被填充为 0。

常见应用场景

shift() 函数在处理时间序列数据、计算数据差值、计算百分比变化等方面非常有用。

1. 计算时间序列数据的差值

import pandas as pd# 创建一个包含时间序列数据的DataFrame
data = {'Date': pd.date_range(start='2023-01-01', periods=5, freq='D'),'Price': [100, 105, 110, 108, 112]}
df = pd.DataFrame(data)# 计算每日价格的差值
df['Price_Diff'] = df['Price'].diff()
print(df)

输出结果:

Date  Price  Price_Diff
0 2023-01-01    100         NaN
1 2023-01-02    105         5.0
2 2023-01-03    110         5.0
3 2023-01-04    108        -2.0
4 2023-01-05    112         4.0

2. 计算数据的滞后值或前值

import pandas as pd# 创建一个包含数据的DataFrame
data = {'Value': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)# 计算数据的滞后值(前一行的值)
df['Lagged_Value'] = df['Value'].shift(1)
print(df)

输出结果:

Value  Lagged_Value
0     10           NaN
1     20          10.0
2     30          20.0
3     40          30.0
4     50          40.0

3. 计算数据的百分比变化

import pandas as pd# 创建一个包含数据的DataFrame
data = {'Sales': [1000, 1200, 1500, 1300, 1600]}
df = pd.DataFrame(data)# 计算数据的百分比变化
df['Percentage_Change'] = (df['Sales'] - df['Sales'].shift(1)) / df['Sales'].shift(1) * 100
print(df)

输出结果:

Sales  Percentage_Change
0   1000                 NaN
1   1200                20.0
2   1500                25.0
3   1300               -13.3
4   1600                23.1

4. 创建滑动窗口统计信息

import pandas as pd# 创建一个包含数据的DataFrame
data = {'Value': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}
df = pd.DataFrame(data)# 计算数据的滑动平均值(窗口大小为3)
df['Moving_Average'] = df['Value'].rolling(window=3).mean()
print(df)

输出结果:

Value  Moving_Average
0      1              NaN
1      2              NaN
2      3              2.0
3      4              3.0
4      5              4.0
5      6              5.0
6      7              6.0
7      8              7.0
8      9              8.0
9     10              9.0

总结

shift() 函数是 Pandas 中用于移动或偏移数据的重要工具。它可以处理时间序列数据、计算数据差值以及进行数据预处理。通过本文的介绍和示例,应该已经掌握了 shift() 函数的基本用法和常见应用场景。在实际数据分析和处理中,熟练使用这个函数将有助于提高工作效率和数据处理的精度。

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

更多Python学习内容:ipengtao.com

干货笔记整理

  100个爬虫常见问题.pdf ,太全了!

Python 自动化运维 100个常见问题.pdf

Python Web 开发常见的100个问题.pdf

124个Python案例,完整源代码!

PYTHON 3.10中文版官方文档

耗时三个月整理的《Python之路2.0.pdf》开放下载

最经典的编程教材《Think Python》开源中文版.PDF下载

6abf7b4d13211856aa83cebdbde0191b.png

点击“阅读原文”,获取更多学习内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/341748.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法】最佳牛围栏(二分,前缀和,双指针)

题目 农夫约翰的农场由 N 块田地组成,每块地里都有一定数量的牛,其数量不会少于 1 头,也不会超过 2000 头。 约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最大。 围起区域内…

【Android开发】不同Activity之间的数据回传实例(二)星座测算游戏

一、功能介绍 该项目实现的功能主要有: 在程序的首页界面可以输入用户的姓名,并且可以通过下方的日历栏选择自己的出生日期。输入完成后,点击星座测算按钮,则程序跳转到星座分析界面。在该界面上显示用户的个人信息,…

HarmonyOS 开发基础(八)Row和Column

HarmonyOS 开发基础(八)Row和Column 一、Column 容器 1、容器说明: 纵向容器主轴方向:从上到下纵向交叉轴方向:从左到右横向 2、容器属性: justifyContent:设置子元素在主轴方向的对齐格式…

货拉拉智能监控实践:如何解决多云架构下的故障应急问题?

一分钟精华速览 在月活超千万的大规模业务背景下,货拉拉遭遇了多云环境下的监控碎片化、规划无序等问题。为了应对这些挑战,货拉拉开发了一站式监控平台——Monitor。该平台的部署有效地实现了对核心应用的监控和报警全覆盖,显著提高了应急响…

写点东西《Docker入门(上)》

写点东西《Docker入门(上)》 环境变量 Docker 镜像 Docker CMD 与 ENTRYPOINT 有什么区别 Docker 中的网络: Docker 存储: Docker 是一个工具,允许开发人员将他们的应用程序及其所有依赖项打包到一个容器中。然后&…

Java Http各个请求类型详细介绍

1. 前言 在Spring Boot框架中,HTTP请求类型是构建Web应用程序的重要组成部分。常见的请求类型包括GET、POST、PUT和DELETE,每种类型都有其特定的用途和特点。本文将详细比较这四种请求类型,帮助您在开发过程中做出明智的选择。 2. GET请求…

你知道谁才是 “最懂程序员” 的搜索引擎?

大家好,我是奇兵,作为一名程序员,我们开发的过程中几乎每天都和搜索引擎打交道,利用它来搜文档、解决 Bug 等等。 而随着 AI 的发展,搜索引擎也变得越来越智能,市面上也涌现除了越来越多的 AI 搜索引擎。 …

少儿编程 2023年12月中国电子学会图形化编程等级考试Scratch编程三级真题解析(选择题)

2023年12月scratch编程等级考试三级真题 选择题 1、运行左图程序,想得到右图中的效果,红色框应填写的数值是 A、12 B、11 C、10 D、9 答案:D 考点分析:考查积木综合使用,从右边的图形中可以看到第一层小正方形个数为9个,而左边程序中内外层循环的次数都是一样,所以…

机器学习-协同过滤

1、协同过滤要解决的问题 协同过滤算法主要用于推荐系统,推荐系统是信息过载所采用的措施,面对海量的数据信息,从中快速推荐出符合用户特点的物品。一些人的“选择恐惧症”、没有明确需求的人。 解决如何从大量信息中找到自己感兴趣的信息。…

2023年全国职业院校技能大赛软件测试赛题—单元测试卷③

单元测试 一、任务要求 题目1:输入一个大写字母一个小写字母。根据输入的第一个字母和英文周几单词的第一个大写字母判断是周几,如果无法根据第一个大写字母判断,则继续根据输入的第二个小写字母进行判断,最终返回正确的英文周几…

排序之希尔排序

希尔排序,也被称为缩小增量排序,是一种基于插入排序的算法。它通过比较相距一定间隔的元素,来工作,然后再逐渐减小间隔,直到整个数组排序完成。这种算法的主要优点是对于部分有序的数组,其效率非常高&#…

编码器与解码器LLM全解析:掌握NLP核心技术的关键!

让我们深入了解:基于编码器和基于解码器的模型有什么区别? 编码器与解码器风格的Transformer 从根本上说,编码器和解码器风格的架构都使用相同的自注意力层来编码词汇标记。然而,主要区别在于编码器旨在学习可以用于各种预测建模…