(3) 根据习惯日期定位方式定位
首先看看有哪些定位? 之前运用的都可以, 加上数字即可
- | - SemiMonthEnd | - MonthEnd | - WeekOfMonth | - QuarterEnd | - BQuarterEnd | - YearEnd | - BYearEnd |
- | - SemiMonthBegin| - MonthBegin| - LastWeekOfMonth| - QuarterBegin| - BQuarterBegin | - YearBegin| - BYearBegin |
- | - Hour | - Minute | - Second | -
- now+MonthEnd(2) #往后挪两个月, 这弥补了之前无法定位到当前月的下个月问题 Timestamp('2020-01-31 16:34:35.850953')
注意: 错误示范
- offset=MonthEnd(2)
- offset.rollforward(now) #结果仍然为 Timestamp('2019-12-31 16:34:35.850953'), 想要达到 2020 年 1 月只能用加的方式
注意: 通常情况下我们一般不单独做时间序列单列, 都会跟一些数据, 也就是 series 和 dataframe, 可以使用 shift 进行日期变更
四, 在两个时间点内按要求添加数据
这个功能就相当于 range(a,b), 所以公式也很像 date_range(start='开头日期',end='结尾日期',periods = 递增几次, freq='频率')
1. date_range('开头日期',n)
从开头日期开始一天一天的列出 n 天
2. date_range('开头日期', 递增几次, 频率)
频率有以下几种表示方式:
a. 天以内
- | - 2(按 2 天递增) |-'3B'(按 3 天工作日递增)| - '4h'(按四个小时递增) | - '50min'(按五十分钟递增)
- | - '6S'(按六秒递增)| - '7ms'(按七毫秒递增)|-'8U'(按八微秒递增)| - '2D4h50min6S7ms8U' (可以连着写)
- pd.date_range('2019-12-16',periods=5,freq='2D4h50min6S7ms8U')
- DatetimeIndex(['2019-12-16 00:00:00', '2019-12-18 04:50:06.007008',
- '2019-12-20 09:40:12.014016', '2019-12-22 14:30:18.021024',
- '2019-12-24 19:20:24.028032'],
- dtype='datetime64[ns]', freq='190206007008U')
b. 周以内
- | - 'W-TUE'(从开头日期的当天开始, 往后第一个星期二开始, 按 7 天递增)
- pd.date_range('2019-12-16',periods=5,freq='W-TUE')
- DatetimeIndex(['2019-12-17', '2019-12-24', '2019-12-31', '2020-01-07',
- '2020-01-14'],
- dtype='datetime64[ns]', freq='W-TUE')
c. 月以内
- |-'WOM-3FRI'(从开头日期开始月的第 3 个星期五, 按月递增)
- pd.date_range('2019-12-21',periods=5,freq='WOM-3FRI') #注意: 如果给出的日期超过本月第三个星期五将跳过本月
- DatetimeIndex(['2020-01-17', '2020-02-21', '2020-03-20',
- '2020-04-17'],dtype='datetime64[ns]', freq='WOM-3FRI')
- | -'6M'(从开头日期的当月月底开始, 按六个月递增)| - '6BM'(从开头日期的当月最后一个工作日开始, 按六个月递增)
- pd.date_range('2019-12-21',periods=5,freq='6M') # 注意: 与 MS 的区别
- DatetimeIndex(['2019-12-31', '2020-06-30', '2020-12-31', '2021-06-30',
- '2021-12-31'],
- dtype='datetime64[ns]', freq='6M')
- pd.date_range('2018-12-21',periods=5,freq='6BM')
- DatetimeIndex(['2018-12-31', '2019-06-28', '2019-12-31', '2020-06-30',
- '2020-12-31'],
- dtype='datetime64[ns]', freq='6BM')
- | -'7MS'(从开头日期的当月月初开始, 按七个月递增)| -'7BMS'(从开头日期的当月第一个工作日开始, 按七个月递增)
- pd.date_range('2018-12-21',periods=5,freq='7MS') # 注意: 如果给定的日期不是月头开始, 那么结果会从下个月月初开始, 按七个月递增
- DatetimeIndex(['2019-01-01', '2019-08-01', '2020-03-01', '2020-10-01',
- '2021-05-01'],
- dtype='datetime64[ns]', freq='7MS')
- pd.date_range('2018-12-21',periods=5,freq='7BMS')
- DatetimeIndex(['2019-01-01', '2019-08-01', '2020-03-02', '2020-10-01',
- '2021-05-03'],
- dtype='datetime64[ns]', freq='7BMS')
d. 季度以内
- | - 'Q-FEB'(从二月月底开始, 按三个月递增)|-'QS-FEB'(从二月月头开始, 按三个月递增)
- | - 'BQ-FEB'(从二月最后一个工作日开始, 按三个月递增)|- 'BQS-FEB'(从二月第一个工作日开始, 按三个月递增)
- pd.date_range('2018-12-01',periods=5,freq='BQ-FEB')
- # Q 和 QS 没什么注意点, 但 BQ 和 BQS 需要注意, 如果给定的日期已经过了当年二月, 则系统会从下月的二月开始显示
- DatetimeIndex(['2019-02-28', '2019-05-31', '2019-08-30', '2019-11-29',
- '2020-02-28'],
- dtype='datetime64[ns]', freq='BQ-FEB')
e. 年以内
- | - 'A-FEB'(从开头年份的二月底开始, 按年递增)| - 'BA-FEB'(从开头年份的二月最后一个工作日开始, 按年递增)
- | - 'AS-FEB'(从开头年份的二月初开始, 按年递增)| - 'BAS-FEB'(从开头年的二月第一个工作日开始, 按年递增)
- pd.date_range('2018-12-01',periods=5,freq='AS-FEB') #同上
- DatetimeIndex(['2019-02-01', '2020-02-01', '2021-02-01', '2022-02-01',
- '2023-02-01'],
- dtype='datetime64[ns]', freq='AS-FEB')
- -----------------
前文中我们看到有些日期已经超过导致递延问题, 那么我们如何解决这类问题?
我们可以提取年, 月来避免
比如前文中 pd.date_range(
'2018-12-01',periods=5,freq='BQ-FEB')
中的问题从年初开始
- import pandas as pd
- startDate="2018-12-01"
- startDateYear=str(pd.to_datetime(startDate).year)
- pd.date_range(startDateYear,periods=5,freq='AS-FEB')
- DatetimeIndex(['2018-02-01', '2019-02-01', '2020-02-01', '2021-02-01',
- '2022-02-01'],
- dtype='datetime64[ns]', freq='AS-FEB')
比如前文中 pd.date_range(
'2019-12-21',periods=5,freq='WOM-3FRI')
中的问题从月初开始
- import pandas as pd
- startDate="2019-12-01"
- startDateYear=str(pd.to_datetime(startDate).year)
- startDateMonth=str(pd.to_datetime(startDate).month)
- year_month=startDateYear+'-'+startDateMonth
- pd.date_range(year_month,periods=5,freq='WOM-3FRI')
- DatetimeIndex(['2019-12-20', '2020-01-17', '2020-02-21', '2020-03-20',
- '2020-04-17'],
- dtype='datetime64[ns]', freq='WOM-3FRI')
- 3. date_range('开头日期','结束日期', 频率)
- 4. date_range('开头日期','结束日期', 递增几次)
按天数等分
来源: http://www.bubuko.com/infodetail-3334987.html