【Python数据分析】pandas日期范围date_range,, 目录


目录

1.date_range 1.1 按频率生成时间段 1.2 按复合频率生成时间段 1.3 asfreq频率转换 1.4 生成超前-滞后的数据范围 2.时间戳索引DatetimeIndex

1.date_range

1.1 按频率生成时间段

import pandas as pdprint(pd.date_range('2017/1/1','2017/1/4'))  # 默认freq = 'D':每日历日print(pd.date_range('2017/1/1','2017/1/4', freq = 'B'))  # B:每工作日print(pd.date_range('2017/1/1','2017/1/2', freq = 'H'))  # H:每小时print(pd.date_range('2017/1/1 12:00','2017/1/1 12:10', freq = 'T'))  # T/MIN:每分print(pd.date_range('2017/1/1 12:00:00','2017/1/1 12:00:10', freq = 'S'))  # S:每秒print(pd.date_range('2017/1/1 12:00:00','2017/1/1 12:00:10', freq = 'L'))  # L:每毫秒(千分之一秒)print(pd.date_range('2017/1/1 12:00:00','2017/1/1 12:00:10', freq = 'U'))  # U:每微秒(百万分之一秒)print(pd.date_range('2017/1/1','2017/2/1', freq = 'W-MON'))# W-MON:从指定星期几开始算起,每周# 星期几缩写:MON/TUE/WED/THU/FRI/SAT/SUNprint(pd.date_range('2017/1/1','2017/5/1', freq = 'WOM-2MON'))# WOM-2MON:每月的第几个星期几开始算,这里是每月第二个星期一print(pd.date_range('2017','2018', freq = 'M'))print(pd.date_range('2017','2020', freq = 'Q-DEC'))print(pd.date_range('2017','2020', freq = 'A-DEC'))print('-' * 50)# M:每月最后一个日历日# Q-月:指定月为季度末,每个季度末最后一月的最后一个日历日# A-月:每年指定月份的最后一个日历日# 月缩写:JAN/FEB/MAR/APR/MAY/JUN/JUL/AUG/SEP/OCT/NOV/DEC# 所以Q-月只有三种情况:1-4-7-10,2-5-8-11,3-6-9-12print(pd.date_range('2017','2018', freq = 'BM'))print(pd.date_range('2017','2020', freq = 'BQ-DEC'))print(pd.date_range('2017','2020', freq = 'BA-DEC'))print('*' * 50)# BM:每月最后一个工作日# BQ-月:指定月为季度末,每个季度末最后一月的最后一个工作日# BA-月:每年指定月份的最后一个工作日print(pd.date_range('2017','2018', freq = 'MS'))print(pd.date_range('2017','2020', freq = 'QS-DEC'))print(pd.date_range('2017','2020', freq = 'AS-DEC'))print('-' * 50)# M:每月第一个日历日# Q-月:指定月为季度末,每个季度末最后一月的第一个日历日# A-月:每年指定月份的第一个日历日print(pd.date_range('2017','2018', freq = 'BMS'))print(pd.date_range('2017','2020', freq = 'BQS-DEC'))print(pd.date_range('2017','2020', freq = 'BAS-DEC'))# BM:每月第一个工作日# BQ-月:指定月为季度末,每个季度末最后一月的第一个工作日# BA-月:每年指定月份的第一个工作日

1.2 按复合频率生成时间段

import pandas as pdprint(pd.date_range('2017/1/1','2017/2/1', freq = '7D'))  # 7天print(pd.date_range('2017/1/1','2017/1/2', freq = '2h30min'))  # 2小时30分钟print(pd.date_range('2017','2018', freq = '2M'))  # 2月,每月最后一个日历日

1.3 asfreq频率转换

import numpy as npimport pandas as pdts = pd.Series(np.random.rand(4), index = pd.date_range('20170101','20170104'))print(ts)print(ts.asfreq('4H',method = 'ffill'))# 改变频率,这里是D改为4H# method:插值模式,None不插值,ffill用之前值填充,bfill用之后值填充

1.4 生成超前-滞后的数据范围

import numpy as npimport pandas as pd# pd.date_range()-日期范围:超前/滞后数据ts = pd.Series(np.random.rand(4),              index = pd.date_range('20170101','20170104'))print(ts)print(ts.shift(2))print(ts.shift(-2))print('*' * 50)# 正数:数值后移(滞后);负数:数值前移(超前)per = ts/ts.shift(1) - 1print(per)print('-' * 50)# 计算变化百分比,这里计算:该时间戳与上一个时间戳相比,变化百分比print(ts.shift(2, freq = 'D'))print(ts.shift(2, freq = 'T'))# 加上freq参数:对时间戳进行位移,而不是对数值进行位移

2.时间戳索引DatetimeIndex

以下是一个生成时间戳索引的案例

import pandas as pdimport numpy as np# 直接生成时间戳索引,支持str、datetime.datetime# 单个时间戳为Timestamp,多个时间戳为DatetimeIndexdix = pd.DatetimeIndex(['2020-01-01','2020-01-02','2020-01-03','2020-01-04'])print(dix)print(dix[0],type(dix[0]))print('-' * 50)# 以DatetimeIndex为index的Series,为TimeSries,时间序列st = pd.Series(np.random.rand(len(dix)), index = dix)print(st,type(st))print(st.index)

【Python数据分析】pandas日期范围date_range

评论关闭