pandas笔记:tseries.offset

news2024/12/28 19:18:06

进行date的偏移

1 各种offset 

1.1 DateOffset

  1.1.1 基本使用方法

class pandas.tseries.offsets.DateOffset
n

偏移量表示的时间段数。

如果没有指定时间模式,则默认为n天。

normalize是否将DateOffset偏移的结果向下舍入到前一天午夜
**kwds

添加到偏移量的时间参数

  • 年(years)
  • 月(months)
  • 周(weeks)
  • 日(days)
  • 小时(hours)
  • 分钟(minutes)
  • 秒(seconds)
  • 毫秒(milliseconds)
  • 微秒(microseconds)
  • 纳秒(nanoseconds)

【指的是在原来的timestamp的基础上,加上这个时间偏移量】

替换偏移量值的参数:

  • 年(year)
  • 月(month)
  • 日(day)
  • 工作日(weekday)
  • 小时(hour)
  • 分钟(minute)
  • 秒(second)
  • 微秒(microsecond)
  • 纳秒(nanosecond)

【指将原来timestamp的相应时间参数,替换成这个时间偏移量】

1.1.2 举例说明

from pandas.tseries.offsets import DateOffset
import pandas as pd

ts=pd.Timestamp('2023-04-29 15:03:31')
ts+DateOffset(month=3),ts+DateOffset(months=3)
#(Timestamp('2023-03-29 15:03:31'), Timestamp('2023-07-29 15:03:31'))

1.2  BusinessDay

几个工作日的日期偏移

class pandas.tseries.offsets.BusinessDay

 1.2.1 主要参数

n默认为1.,偏移的工作日的天数
normalize

默认为False

如果为True,将起止时间规范化到午夜0点

1.2.2  举例说明

import pandas as pd
t1=pd.Timestamp('2023-04-28 10:00')
t1.strftime('%Y%m%d-%A--%H:%M')
#'20230428-Friday--10:00'


td=pd.tseries.offsets.BusinessDay(2)
(t1+td).strftime('%Y%m%d-%A-%H:%M')
#'20230502-Tuesday-10:00'

td=pd.tseries.offsets.BusinessDay(2,normalize=True)
(t1+td).strftime('%Y%m%d-%A-%H:%M')
'20230502-Tuesday-00:00'
  •  不管t1是几点,都算那一天
  • 工作日就是周一至周五,不考虑节假日

1.3 BusinessHour

class pandas.tseries.offsets.BusinessHour

1.3.1 主要参数

n默认为1,表示偏移几个小时
normalize

默认为False

如果为True,将起止时间规范化到午夜0点

starttime或者time的lilst,表示一天的上班时间
endtime或者time的lilst,表示一天的下班时间

 1.3.2 举例

import pandas as pd
t1=pd.Timestamp('2023-04-28 8:00')
t1+pd.tseries.offsets.BusinessHour(n=5)
#Timestamp('2023-04-28 14:00:00')

t1+pd.tseries.offsets.BusinessHour(n=10)
#Timestamp('2023-05-01 11:00:00')
#当天工作到17:00,还剩2小时,第2天继续干


t1=pd.Timestamp('2023-04-28 18:00')
t1+pd.tseries.offsets.BusinessHour(n=5)
#Timestamp('2023-05-01 14:00:00')
#当天已经过了工作时间(17:00),同时第二天是周末,所以直接挪到周一9:00开始计时
t1=pd.Timestamp('2023-04-28 18:00')
t1+pd.tseries.offsets.BusinessHour(n=5,start='12:00',end='14:00')
#Timestamp('2023-05-03 13:00:00')
#跳过周末+每天只上2小时班

t1=pd.Timestamp('2023-04-28 18:00')
t1+pd.tseries.offsets.BusinessHour(n=5,
                                   start=['6:00','12:00'],
                                   end=['9:00','14:00'])
#Timestamp('2023-05-02 06:00:00')
#每天两段工作时间

 1.4 CustomBusinessDay

手动选择哪些是节假日,哪些天是工作日

1.4.1 主要参数

n默认为1,表示偏移几个小时
normalize

默认为False

如果为True,将起止时间规范化到午夜0点

weekmask

字符串,默认是‘Mon Tue Wed Thu Fri’

记录了哪些是有效的工作日

holidays记录了哪些是节假日

1.4.2 使用举例 

import pandas as pd
t1=pd.Timestamp('2023-04-28 8:00')
t1.strftime('%Y%m%d--%A')
#'20230428--Friday'

t2=t1+pd.tseries.offsets.CustomBusinessDay(2,
                                       weekmask='Tue Wed Thu')
t2.strftime('%Y%m%d--%A')
#'20230503--Wednesday'
# 周一不上班,所以两天工作日是周二和周三

 

t3=t1+pd.tseries.offsets.CustomBusinessDay(2,
                                       weekmask='Tue Wed Thu',
                                          holidays=['2023-05-03','2023-05-04'])
t3.strftime('%Y%m%d--%A')
#'20230509--Tuesday'
#0503,0504放假不上班——这两天不能考虑

1.5  CustomBusinessHour

参数都是CustomBusinessDay和BusinessHour里面的

n默认为1,表示偏移几个小时
normalize

默认为False

如果为True,将起止时间规范化到午夜0点

weekmask

字符串,默认是‘Mon Tue Wed Thu Fri’

记录了哪些是有效的工作日

holidays记录了哪些是节假日
starttime或者time的lilst,表示一天的上班时间
endtime或者time的lilst,表示一天的下班时间

1.6 MonthEnd

到下一个月末(下一个是指,比如1/31加MonthEnd,得到的结果是2月的最后一天)

import pandas as pd
t1=pd.Timestamp('2023-04-28 8:00')
t1+pd.tseries.offsets.MonthEnd()
#Timestamp('2023-04-30 08:00:00')

import pandas as pd
t1=pd.Timestamp('2023-04-30 8:00')
t1+pd.tseries.offsets.MonthEnd()
#Timestamp('2023-05-31 08:00:00')

如果在月末最后一天也希望得到当前月份的MonthEnd,需要使用rollforward函数(同时也不是加上OffSet)

import pandas as pd
t1=pd.Timestamp('2023-04-30 8:00')
pd.tseries.offsets.MonthEnd().rollforward(t1)
#Timestamp('2023-04-30 08:00:00')

1.7 MonthBegin

 到下一个月初(下一个是指,比如1/31加MonthBegin,得到的结果是2月的第一天)

import pandas as pd
t1=pd.Timestamp('2023-04-1 8:00')
t1+pd.tseries.offsets.MonthBegin()
#Timestamp('2023-05-01 08:00:00')

如果希望得到当前月份的MonthBegin,需要使用rollback函数(同时也不是加上OffSet)

import pandas as pd
t1=pd.Timestamp('2023-04-30 8:00')
pd.tseries.offsets.MonthBegin().rollback(t1)
#Timestamp('2023-04-01 08:00:00')

1.8 BusinessMonthEnd

用法和MonthEnd(1.6节类似),只不过这里不是月的最后一天,而是月的最后一个工作日

1.9 BusinessMonthBegin

用法和MonthBegin(1.6节类似),只不过这里不是月的第一天,而是月的第一个工作日

1.10 CustomBusinessMonthEnd

1.4和1.8的结合,人为指定工作日和holiday

1.11 CustomBusinessMonthEnd

1.4和1.9的结合,人为指定工作日和holiday

1.12  SemiMonthEnd

每个月的offset结果有两种可能性:

  • 大于等于 day_of_month——>偏移到月底
  • 小于day_of_month——>偏移到该月的day_of_month

1.12.1 主要参数

n默认为1,表示偏移几个小时
normalize

默认为False

如果为True,将起止时间规范化到午夜0点

day_of_monthint, {1, 3,…,27}, default 15

1.12.2 举例

import pandas as pd
t1=pd.Timestamp('2023-04-1 8:00')
t1+pd.tseries.offsets.SemiMonthEnd()
#Timestamp('2023-04-15 08:00:00')

import pandas as pd
t1=pd.Timestamp('2023-04-15 8:00')
t1+pd.tseries.offsets.SemiMonthEnd()
#Timestamp('2023-04-30 08:00:00')



#同样地,rollforward也是适用的
import pandas as pd
t1=pd.Timestamp('2023-04-15 8:00')
pd.tseries.offsets.SemiMonthEnd().rollforward(t1)
#Timestamp('2023-04-15 08:00:00')

 1.13 SemiMonthBegin

每个月的offset结果有两种可能性:

  • 大于等于 day_of_month——>偏移到下个月月初
  • 小于day_of_month——>偏移到该月的day_of_month

1.13.1 主要参数

n默认为1,表示偏移几个半月
normalize

默认为False

如果为True,将起止时间规范化到午夜0点

day_of_monthint, {1, 3,…,27}, default 15

1.13.2 举例 

import pandas as pd
t1=pd.Timestamp('2023-04-1 8:00')
t1+pd.tseries.offsets.SemiMonthBegin(),t1+pd.tseries.offsets.SemiMonthEnd()
#(Timestamp('2023-04-15 08:00:00'), Timestamp('2023-04-15 08:00:00'))


import pandas as pd
t1=pd.Timestamp('2023-04-15 8:00')
t1+pd.tseries.offsets.SemiMonthBegin(),t1+pd.tseries.offsets.SemiMonthEnd()
#(Timestamp('2023-05-01 08:00:00'), Timestamp('2023-04-30 08:00:00'))

 1.14 Week

class pandas.tseries.offsets.Week

 如果没有指定weekday的话,就是偏移到n周之后;如果指定了weekday的话,就是之后的第n个对应的weekday

1.14.1 主要参数

n偏移几周
weekday如果指定,就是偏移到周几(0~6,分别表示周一~周日)

1.14.2 举例

import pandas as pd
t1=pd.Timestamp('2023-04-1 8:00')
t1.strftime('%Y%m%d--%A')
#'20230401--Saturday'

t2=t1+pd.tseries.offsets.Week(1)
t2.strftime('%Y%m%d--%A')
#'20230408--Saturday'


t2=t1+pd.tseries.offsets.Week(1,weekday=5)
t2.strftime('%Y%m%d--%A')
#'20230408--Saturday'
#下一个周六

t2=t1+pd.tseries.offsets.Week(1,weekday=2)
t2.strftime('%Y%m%d--%A')
#'20230405--Wednesday'
#下一个周三

1.15 WeekOfMonth

描述如下的日期:每个月的第x周的周几

1.15.1 主要参数

n

偏移量

week

int {0, 1, 2, 3, …}, default 0

这个月的第几周 默认是0(第一周)

weekday

int {0, 1, …, 6}, default 0

偏移到周几(0~6,分别表示周一~周日)

注:完整的周是从周一开始的 

以2023年3月为例,第0周是3/6这一周 

1.15.2 举例

import pandas as pd
t1=pd.Timestamp('2023-03-3 8:00')
t1.strftime('%Y%m%d--%A')
#'20230303--Friday'

t2=t1+pd.tseries.offsets.WeekOfMonth()
t2.strftime('%Y%m%d--%A')
#'20230306--Monday'

#3月3号算两月份,3月的第一周是3/6



import pandas as pd
t1=pd.Timestamp('2023-03-8 8:00')
t1.strftime('%Y%m%d--%A')
#'20230308--Wednesday'

t2=t1+pd.tseries.offsets.WeekOfMonth()
t2.strftime('%Y%m%d--%A')
#'20230403--Monday'

#3月8号算3月份,所以偏移是偏移到4月份

1.16 LastWeekOfMonth

每个月最后一周的周几

1.16.1 主要参数

n

偏移量

weekday

int {0, 1, …, 6}, default 0

偏移到周几(0~6,分别表示周一~周日)

同1.15,完整的周是从周一开始的 

以2023年3月为例,最后一周是3/27,3/27之后的

 

1.16.2 举例

import pandas as pd
t1=pd.Timestamp('2023-03-8 8:00')
t1.strftime('%Y%m%d--%A'
#'20230308--Wednesday'

t2=t1+pd.tseries.offsets.LastWeekOfMonth()
t2.strftime('%Y%m%d--%A')
#'20230327--Monday'
import pandas as pd
t1=pd.Timestamp('2023-03-28 8:00')
t1.strftime('%Y%m%d--%A')
#'20230328--Tuesday'

t2=t1+pd.tseries.offsets.LastWeekOfMonth()
t2.strftime('%Y%m%d--%A')
#'20230424--Monday'

#三月最后一周,向后偏移,就到4月去了

1.17 BYearEnd

年的最后一个工作日

1.17.1 举例

import pandas as pd
t1=pd.Timestamp('2023-03-28 8:00')
t1.strftime('%Y%m%d--%A')
#'20230328--Tuesday'

t2=t1+pd.tseries.offsets.BYearEnd(2)
t2.strftime('%Y%m%d--%A')
#'20241231--Tuesday'

t2=t1-pd.tseries.offsets.BYearEnd(6)
t2.strftime('%Y%m%d--%A')
#'20171229--Friday'

1.18 BYearBegin

年的第一个工作日

1.18.1 举例

import pandas as pd
t1=pd.Timestamp('2023-03-28 8:00')
t1.strftime('%Y%m%d--%A')
#'20230328--Tuesday'

t2=t1+pd.tseries.offsets.BYearBegin(2)
t2.strftime('%Y%m%d--%A')
#'20250101--Wednesday'

t2=t1-pd.tseries.offsets.BYearBegin()
t2.strftime('%Y%m%d--%A')
#'20230102--Monday'

1.19 YearEnd

年的最后一天

1.20 YearBegin

年的第一天

1.21 Easter

第n个复活节

import pandas as pd
t1=pd.Timestamp('2023-03-28 8:00')
t1.strftime('%Y%m%d--%A')
#'20230328--Tuesday'

t2=t1+pd.tseries.offsets.Easter(2)
t2.strftime('%Y%m%d--%A')
#'20240331--Sunday'

2 主要attribute

freqstr

返回一个string,表示频率

kwds

返回类的kwds

copy

复制Offset

is_month_end

is_month_start

(感觉和offsets里面的内容无关?)判断timestamp是否在一个月的最后一天/第一天

is_quater_end

is_quater_start

(感觉和offsets里面的内容无关?)判断timestamp是否在一个季度的最后一天/第一天

 

is_year_end

is_year_start

(感觉和offsets里面的内容无关?)判断timestamp是否在一个年的最后一天/第一天

参考内容:Date offsets — pandas 2.0.0 documentation (pydata.org)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ROS学习第十节——参数服务器

前言:本小节主要是对于参数服务器参数的修改,需要掌握操作参数的函数使用 1.基本介绍 参数服务器实现是最为简单的,该模型如下图所示,该模型中涉及到三个角色: ROS Master (管理者)Talker (参数设置者)Listener (参数调用者) ROS Master …

Bootstrap02 家居商城首页之最新上架热门家具分类页面

目录 案例1:首页最新上架&热门家居实现 案例2:分类页面搜索区域Bootstrap实现&栅格框架搭建 案例3:分类页面分类列表实现&整合 案例1:首页最新上架&热门家居实现 ①.页面内容:画像 Figure ②.组件…

C learning_7

目录 1.for循环 1.虽然while循环和for循环本质上都可以实现循环,但是它们在使用方法和场合上还是有一些区别的。 2.while循环中存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样 查找修改就不够集中和方便。所以…

Vue2-黑马(十四)

目录: (1)实战-crud (2)实战--crud查询和删除 (3) 实战-crud-修改 (1)实战-crud 服务端的接口: 前端需要修改的地方:业务简单的一半需要改3个…

Vue 组件

文章目录 Vue 组件全局组件局部组件Prop动态 PropProp 验证 自定义事件 Vue 组件 组件(Component)是 Vue.js 最强大的功能之一。 组件可以扩展 HTML 元素,封装可重用的代码。 组件系统让我们可以用独立可复用的小组件来构建大型应用&#x…

Go程序开发快速入门

当进行Go程序开发时,需要注意以下几点: 1、代码可读性:尽可能使用有意义的变量名和注释,确保代码易于理解和维护。 2、错误处理:Go语言有很好的错误处理机制,应该合理地处理错误,以便于排除错…

【运动规划算法项目实战】路径规划中常用的插值方法

文章目录 简介一、线性插值代码实现二、三次样条插值三、B样条插值四、贝塞尔曲线插值总结简介 常见用于处理路径平滑的插值算法主要包括线性插值、三次样条插值、B样条插值和贝塞尔曲线插值等,下面分别介绍它们的优缺点和使用场景。 一、线性插值 线性插值是最简单的插值方…

ROS——Teb算法的优化

一、简介 “TEB”全称Time Elastic Band(时间弹性带)Local Planner,该方法针对全局路径规划器生成的初始轨迹进行后续修正(modification),从而优化机器人的运动轨迹,属于局部路径规划。 关于eletic band(橡…

Java 依赖注入(DI)

只要做过 Java 一段时间,基本上都会遇到这个问题。 Dependency Injection (DI)中文称之为依赖注入。 都说了 Spring 的关键部分就是 Dependency Injection (DI),但是什么是依赖,为什么要注入&…

AirServer2023最新免费苹果电脑投屏工具

AirServer是一个Mac专用投屏工具,功能强大,并且可以通过网络和其他平台同步视频内容。可以使用多个设备进行投屏,快速查看同一局域网内的视频。支持的设备:苹果系统。支持 Windows、 Mac、 Android、 iOS、 windows平台。 1、支持…

用腾讯轻联,打通草料二维码与其他应用的连接

一、功能介绍 腾讯轻联是腾讯云推出的“应用连接器”,无需编程,实现多应用的连接。草料二维码作为首批入驻腾讯轻联的合作伙伴和腾讯团队进行了深度协同,提供给用户以下能力: 1.快速对接主流应用 实现企业微信、钉钉、腾讯文档…

基于AT89C52单片机的电子密码锁设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87688544?spm=1001.2014.3001.5503 源码获取 主要内容: 设计一个简易的电子密码锁,并进行仿真实验,该系统能够进行密码输入功能、上锁功能、在锁合状态下通过输入密码进行…

Java并发编程 —— 延迟队列DelayQueue源码解析

一、什么是DelayQueue DelayQueue是一个支持并发的无界延迟队列,队列中的每个元素都有个预定时间,当线程从队列获取元素时,只有到期元素才会出队列,没有到期元素则阻塞等待。队列头元素是最快要到期的元素。因此DelayQueue可用于…

[java聊天室]多个客户端与服务器说话多线程(二)

多客户端链接 之前(java聊天室一)只有第一个连接的客户端可以与服务端说话。 原因: 服务端只调用过一次accept方法,因此只有第一个客户端链接时服务端接受了链接并返回了Socket,此时可以与其交互。 而第二个客户端建立链接时,由于服务端没有再次调用…

【Hello Linux】线程池

作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步 本篇博客简介:简单介绍linux中线程池概念 线程池 Linux线程池线程池的概念线程池的优点线程池的应用场景线程池实现 Linux线程池 线程池的概念 线程池是一种线程…

PyTorch深度学习实战 | 高斯混合模型聚类原理分析

01、问题描述 为理解高斯混合模型解决聚类问题的原理,本实例采用三个一元高斯函数混合构成原始数据,再采用GMM来聚类。 1) 数据 三个一元高斯组件函数可以采用均值和协方差表示如表1所示: ▍表1 三个一元高斯组件函数的均值和协方差 每个高斯…

git的使用——操作流程

一、什么是git git是一个开源的分布式版本控制软件,能够有效并高效的处理很小到非常大的项目。 二、添加SSH公钥 安装下载后,会发现鼠标右击,会出现 Git Bash Here 这个选项,如图所示,点击进入 1.打开git窗口后&…

018:Mapbox GL加载Google地图(影像瓦片图)

第018个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载google地图。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共80行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https://xia…

鉴智机器人重磅发布双目智驾解决方案,新一代全系智驾产品线亮相上海车展

4月18日,以「拥抱汽车行业新时代」为主题的2023上海车展正式拉开帷幕。以视觉3D理解为核心的下一代自动驾驶系统提供商鉴智机器人,携全新升级的智驾产品线首次亮相车展,重磅发布基于AI的双目立体视觉智驾方案。 凭借双目立体视觉系统的差异化…

智能洗地机好用吗?值得入手的洗地机推荐

洗地机是一款高效的地面清洁设备,不仅可以很好清理地面不同形态的干湿垃圾,还减少了人工和水资源的浪费,是我们日常生活中必不可少的清洁工具。作为以一位评测博主,很多朋友咨询我在选购洗地机时应该注意哪些要点,有哪…