时间序列的基础频率

  • D:Day 每日历日
  • B:BusinessDay 每工作日
  • H:Hour 每小时
  • T/min:Minute 每分
  • S:Second 每秒
  • M:MonthEnd 每月最后一个日历日
  • BM:BusinessMonthEnd 每月最后一个工作日
  • MS:MonthBegin 每月第一个日历日
  • BMS:BusinessMonthBegin 每月第一个工作日
  • W-MON、W-TUE:Week 从指定的星期几(MON、TUE、WED、THU、FRI、SAT、SUN)开始算起,每周
  • WOM-1MON、WOM-2MOM:WeekOfMonth  每月第几个星期几,例如:WOM-3FRI 每月第三个星期五
  • Q-JAN、Q-FEB:QuarterEnd对于指定月份(JAN、FEB、MAR、APR、MAY、JUN、JUL、AUG、SEP、OCT、NOV、DEC)结束的年度,每季度最后一月的最后一个日历日
  • BQ-JAN、BQ-FEB:BusinessQuarterEnd对于指定月份结束的年度,每季度最后一月的最后一个工作日
import pandas as pd
from pandas import Series
from pandas.tseries.offsets import Hour,Minute

# 频率和日期偏移量
hour = Hour()
print(hour) # <Hour>
four_hours = Hour(4)
print(four_hours) # <4 * Hours>

index = pd.date_range('1/1/2021','1/2/2021',freq='4H')
print(index) # 1月1日到1月2日,时间间隔4小时
'''
DatetimeIndex(['2021-01-01 00:00:00', '2021-01-01 04:00:00',
               '2021-01-01 08:00:00', '2021-01-01 12:00:00',
               '2021-01-01 16:00:00', '2021-01-01 20:00:00',
               '2021-01-02 00:00:00'],
              dtype='datetime64[ns]', freq='4H')
'''
print(Hour(3)+Minute(30)) # 3小时30分钟 <210 * Minutes>
index = pd.date_range('1/1/2021','1/2/2021',freq='3H30MIN')
print(index)
'''
DatetimeIndex(['2021-01-01 00:00:00', '2021-01-01 03:30:00',
               '2021-01-01 07:00:00', '2021-01-01 10:30:00',
               '2021-01-01 14:00:00', '2021-01-01 17:30:00',
               '2021-01-01 21:00:00'],
              dtype='datetime64[ns]', freq='210T')
'''
ts = Series([1,2,3,4],index=pd.date_range("3/7/2021",periods=4,freq='M'))
print(ts) # 3月开始4个月,M指MonthEnd每月最后一个日历日
'''
2021-03-31    1
2021-04-30    2
2021-05-31    3
2021-06-30    4
Freq: M, dtype: int64
'''
print(ts.shift(2))
'''
2021-03-31    NaN
2021-04-30    NaN
2021-05-31    1.0
2021-06-30    2.0
Freq: M, dtype: float64
'''
print(ts.shift(-2))
'''
2021-03-31    3.0
2021-04-30    4.0
2021-05-31    NaN
2021-06-30    NaN
Freq: M, dtype: float64
'''
print(ts.shift(2,freq='M')) # 2M=2个月
'''
2021-05-31    1
2021-06-30    2
2021-07-31    3
2021-08-31    4
Freq: M, dtype: int64
'''
print(ts.shift(3,freq='D')) # 3D=3天
'''
2021-04-03    1
2021-05-03    2
2021-06-03    3
2021-07-03    4
dtype: int64
'''
print(ts.shift(2,freq='10T')) # 2*10T=20分钟
'''
2021-03-31 00:20:00    1
2021-04-30 00:20:00    2
2021-05-31 00:20:00    3
2021-06-30 00:20:00    4
dtype: int64
'''

 通过偏移量对日期进行位移

# pandas的日期偏移量还可以用在datetime或Timestamp对象上
from pandas.tseries.offsets import Day,MonthEnd
import datetime

now = datetime.datetime(2021,12,15)
print(now + 3*Day())  # 2021-12-18 00:00:00
print(now + MonthEnd())  # 2021-12-31 00:00:00
print(now + MonthEnd(3))  # 2022-02-28 00:00:00

# 通过锚点偏移量rollforward和rollback可以将日期向前向后滚动
offset = MonthEnd()
print(offset.rollforward(now))  # 2021-12-31 00:00:00
print(offset.rollback(now))  # 2021-11-30 00:00:00

 

posted @ 2021-10-14 16:39  OTAKU_nicole  阅读(361)  评论(0编辑  收藏  举报