1. pd.date_range()
生成日期范围
通过上一个博客中的输出结果的内容中可以看到,最后的时间戳索引里面的freq = None,下面就可以开始对freq输出结果进行处理了,主要是调整.date_range()
中的参数
pd.date_range
(start=None, end=None, periods=None, freq=‘D’, tz=None, normalize=False, name=None, closed=None, **kwargs)
start
:开始时间
end
:结束时间
periods
:持续时间
freq
:频率,默认天
normalize
:时间参数值正则化到午夜时间戳
name
:索引对象名称
closed
:默认为None
的情况下,左闭右闭,left
则左闭右开,right
则左开右闭
pd.date_range()
默认频率为日历日
pd.bdate_range()
默认频率为工作日
tz
:时区
1.1 部分参数的讲解
–> 输出的结果为:(rng1由于没有给出时分秒,即使标准化了也不显示出来;rng3添加了时分秒,是可以显示出来的,最后的freq
也不再是None
,变成了D
,也就是day
)
normalize
和name
参数的使用
–> 输出的结果为:(正则化处理之后原来后边的时间就不输出了,相当于直接取日期进行索引)
closed
参数的使用
–> 输出的结果为:(第一个输出是有四个结果,其余的只有三个)
.bdate_range()
工作日
–> 输出的结果为:(3月1号是周日,3月7号是周六,注意最后的freq
变成了B
)
直接转化为list,元素为Timestamp
–> 输出的结果为:
★★★★★★那么问题来了,之前的操作都是将日期字符串转化为日期索引,如何将这些列表中的索引重新转化为我们日常的字符串数据呢?
–> 输出的结果为:
2. 核心参数freq讲解
全部内容通过思维导图归纳如下:
2.1 按每天中的时间频率进行输出
–> 输出的结果为:
2.2 按照每周的时间进行输出
W-MON
:从指定星期几开始算起,每周
星期几缩写:MON/TUE/WED/THU/FRI/SAT/SUN
–> 输出的结果为:
2.3 按照每月的时间进行输出
WOM-2MON
:每月的第几个星期几开始算,这里是每月第二个星期一
–> 输出的结果为:
2.4 按照日历日和工作日的时间进行输出
1) 最后的日历日
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-12
–> 输出的结果为:
2) 最后的工作日
BM
:每月最后一个工作日
BQ-
月:指定月为季度末,每个季度末最后一月的最后一个工作日
BA-
月:每年指定月份的最后一个工作日
–> 输出的结果为:(注意和上面的输出进行对比)
3) 第一个日历日
MS
:每月第一个日历日
QS-
月:指定月为季度末,每个季度末最后一月的第一个日历日
AS-
月:每年指定月份的第一个日历日
–> 输出的结果为:
4) 第一个工作日
BMS
:每月第一个工作日
BQS-
月:指定月为季度末,每个季度末最后一月的第一个工作日
BAS-
月:每年指定月份的第一个工作日
–> 输出的结果为:
2.5 复合频率
复合频率就是指可以认为指定的时间范围,比如下面的几天,多个小时,多个月等
–> 输出的结果为:
2.6 时期频率转换
有时候我们已经获取到了时间戳索引,可能需要将时期的频率进行转换,比如在进行统计的时候,有每天的销售情况,可是想按照隔天统计等,这时候就需要使用时期频率转换
1) 扩充时间数据
–> 输出的结果为:(这里是将时期扩大,会造成空白数据,method
:插值模式,None
不插值,ffill
用之前值填充,bfill
用之后值填充)
2) 缩短时间数据
–> 输出的结果为:(这里是默认以最后一天作为数据显示的,可以根据前面的介绍进行修改,比如每月的第一天)
2.7 超前/滞后数据
在变化百分比的时候,要求使用后面的数据与前面的数据进行运算,然后得到想要的结果,这时候就需要进行.shift()
超前/滞后数据了
1) 上下移动数据
–> 输出的结果为:(数值发生变化,标签索引不变)
2)计算变化百分比:该时间戳与上一个时间戳相比
–> 输出的结果为:(肯定是有一个数据是空值的)
3) 移动时间戳索引
加上freq
参数:对时间戳进行位移,而不是对数值进行位移(和上面的第一个内容区别开)
–> 输出的结果为:(数值不变,标签索引发生变化)