Pandas 的 DateOffset 对象是用于处理日期和时间数据时进行时间偏移的一种工具。
以下是 DateOffset 的一些关键特性和用法:
基本概念
DateOffset 对象类似于 Timedelta,但它遵循日历中的日期时间规则,而不是直接进行时间性质的算术计算,这意味着 DateOffset 会考虑到实际的日历天数,例如在处理跨月或跨年的日期时,它会正确地计算天数差异,而 Timedelta 则是简单地加上指定的天数,不考虑月份和年份的变化。
使用方法
DateOffset 可以通过算数运算符(如 +)或 apply 方法来执行日期偏移操作。
例如,你可以这样使用 DateOffset 来增加月份或小时:
ts=pd.Timestamp('2017-01-01 09:10:11')ts + DateOffset(months=3)# 增加三个月ts + DateOffset(hours=2)# 增加两小时
如果不指定任何参数,DateOffset() 默认增加一个日历日:
ts + DateOffset() # 默认增加一天
支持的参数
DateOffset 支持多种参数,可以指定增加或替换的时间单位,如年、月、周、日、小时、分钟、秒等。这些参数可以是增加到偏移值的(如 years、months、weeks、days、hours、minutes、seconds 等),也可以是替换偏移值的(如 year、month、day、weekday、hour、minute、second 等)。
特殊方法
DateOffset 还提供了 rollforward() 和 rollback() 方法,用于将日期向前或向后滚动到最近的一个有效日期。例如,如果你使用工作日偏移(BDay),它会跳过周末,直接滚动到下一个工作日。
friday=pd.Timestamp('2022-01-05')two_business_days=2* pd.offsets.BDay()friday + two_business_days# 增加两个工作日,会跳过周末
频率字符串
DateOffset 支持频率字符串或偏移别名,可以作为 freq 参数传入。这些频率字符串表示的是 DateOffset 对象及其子类,它们定义了日期时间索引的频率。
DateOffset 是 Pandas 中处理时间序列数据时非常有用的工具,它使得日期和时间的偏移操作更加符合实际日历规则。
常用函数
DateOffset 构造函数
| 类/方法 | 描述 |
|---|---|
pd.DateOffset(**kwargs)
|
创建一个 DateOffset 对象,支持自定义时间偏移量。 |
常用 DateOffset 子类
| 类 | 描述 |
|---|---|
pd.offsets.Day()
|
表示天数的偏移量。 |
pd.offsets.BDay()
|
表示工作日的偏移量(不包括周末)。 |
pd.offsets.Hour()
|
表示小时的偏移量。 |
pd.offsets.Minute()
|
表示分钟的偏移量。 |
pd.offsets.Second()
|
表示秒数的偏移量。 |
pd.offsets.Milli()
|
表示毫秒的偏移量。 |
pd.offsets.Micro()
|
表示微秒的偏移量。 |
pd.offsets.MonthEnd()
|
表示月末的偏移量。 |
pd.offsets.MonthBegin()
|
表示月初的偏移量。 |
pd.offsets.YearEnd()
|
表示年末的偏移量。 |
pd.offsets.YearBegin()
|
表示年初的偏移量。 |
pd.offsets.QuarterEnd()
|
表示季末的偏移量。 |
pd.offsets.QuarterBegin()
|
表示季初的偏移量。 |
pd.offsets.Week()
|
表示周的偏移量。 |
pd.offsets.WeekOfMonth()
|
表示月中第几周的偏移量。 |
DateOffset 属性
| 属性 | 描述 |
|---|---|
DateOffset.name
|
返回 DateOffset 的名称。 |
DateOffset.n
|
返回或设置偏移量的数量。 |
DateOffset.normalize
|
返回或设置是否将时间标准化为午夜。 |
DateOffset 方法
| 方法 | 描述 |
|---|---|
DateOffset.apply(other)
|
将偏移量应用于另一个日期时间对象。 |
DateOffset.rollforward(other)
|
将日期向前滚动到下一个偏移量。 |
DateOffset.rollback(other)
|
将日期向后滚动到上一个偏移量。 |
DateOffset.is_anchored()
|
检查偏移量是否锚定(即是否固定频率)。 |
DateOffset.onOffset(date)
|
检查日期是否与偏移量对齐。 |
实例
importpandasaspdfrompandas.tseries.offsetsimportDay,BDay,MonthEnd# 创建 DateOffsetoffset=Day(3)print(offset)# 输出 <3 * Days># 应用 DateOffsetdate=pd.Timestamp('2023-01-01')new_date=date + offsetprint(new_date)# 输出 2023-01-04# 使用常用子类bday_offset=BDay(2)new_bdate=date + bday_offsetprint(new_bdate)# 输出 2023-01-05(跳过周末)# 月末偏移量month_end_offset=MonthEnd()new_month_end=date + month_end_offsetprint(new_month_end)# 输出 2023-01-31
详细参数说明
pd.DateOffset()
| 参数 | 描述 |
|---|---|
years
|
年数偏移量。 |
months
|
月数偏移量。 |
weeks
|
周数偏移量。 |
days
|
天数偏移量。 |
hours
|
小时数偏移量。 |
minutes
|
分钟数偏移量。 |
seconds
|
秒数偏移量。 |
milliseconds
|
毫秒数偏移量。 |
microseconds
|
微秒数偏移量。 |
nanoseconds
|
纳秒数偏移量。 |
pd.offsets.BDay()
| 参数 | 描述 |
|---|---|
n
|
偏移量的数量,默认为 1。 |
normalize
|
是否将时间标准化为午夜,默认为
False
。
|
pd.offsets.MonthEnd()
| 参数 | 描述 |
|---|---|
n
|
偏移量的数量,默认为 1。 |
normalize
|
是否将时间标准化为午夜,默认为
False
。
|
如果需要更详细的信息,可以参考 Pandas 官方文档 。