Pandas 的 DateOffset 对象是用于处理日期和时间数据时进行时间偏移的一种工具。
以下是 DateOffset 的一些关键特性和用法:
基本概念
DateOffset 对象类似于 Timedelta,但它遵循日历中的日期时间规则,而不是直接进行时间性质的算术计算,这意味着 DateOffset 会考虑到实际的日历天数,例如在处理跨月或跨年的日期时,它会正确地计算天数差异,而 Timedelta 则是简单地加上指定的天数,不考虑月份和年份的变化。
使用方法
DateOffset 可以通过算数运算符(如 +)或 apply 方法来执行日期偏移操作。
例如,你可以这样使用 DateOffset 来增加月份或小时:
实例
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),它会跳过周末,直接滚动到下一个工作日。
实例
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) |
检查日期是否与偏移量对齐。 |
实例
实例
from pandas.tseries.offsets import Day, BDay, MonthEnd
# 创建 DateOffset
offset = Day(3)
print(offset) # 输出 <3 * Days>
# 应用 DateOffset
date = pd.Timestamp('2023-01-01')
new_date = date + offset
print(new_date) # 输出 2023-01-04
# 使用常用子类
bday_offset = BDay(2)
new_bdate = date + bday_offset
print(new_bdate) # 输出 2023-01-05(跳过周末)
# 月末偏移量
month_end_offset = MonthEnd()
new_month_end = date + month_end_offset
print(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 官方文档。
点我分享笔记