发布时间:2025-02-01 19:01
生成日期序列
pandas.date_range(start=None, end=None, periods=None, freq=None, closed=None)
常见参数:
start:开始日期
end:结束日期
periods:日期数量。 若同时指定start,end,periods,则会生成指定数量的时间间隔相同的日期
closed:指定区间的开闭,默认是None,包含start和end (left,right)
freq:日期的频率,默认是\'D\'即天,常见还有M(月、显示xxxx-xx-31每月的最后一天) 如下图
还可以数字与其组合,如5D就是时间间隔为5天
freq= | 说明 |
---|---|
A/ Y | year年 每年的最后一天 |
AS/YS | AS/YS 每年的第一天 |
M | month 每月的最后一天 |
MS | 每月的第一天 |
D | day 每天 |
Q | quarter 每季度的最后一天 |
QS | 每季度的第一天 |
H | 时 |
T/min | 分 |
S | 秒 |
import pandas as pd
# 1、period指定日期数量,日期间隔相同 如结果有6个日期,且间隔为12日
pd.date_range(start=\'2022-04-01\',end=\'2022-05-31\',periods=6)
输出:
DatetimeIndex([\'2022-04-01\', \'2022-04-13\', \'2022-04-25\', \'2022-05-07\',
\'2022-05-19\', \'2022-05-31\'],
dtype=\'datetime64[ns]\', freq=None)
# 2、freq类似指定日期格式:freq=\'D\'表示日期格式为xxxx-xx-xx 具体到日
pd.date_range(start=\'2022-04-01\',end=\'2022-04-11\',freq=\'D\')
输出:
DatetimeIndex([\'2022-04-01\', \'2022-04-02\', \'2022-04-03\', \'2022-04-04\',
\'2022-04-05\', \'2022-04-06\', \'2022-04-07\', \'2022-04-08\',
\'2022-04-09\', \'2022-04-10\', \'2022-04-11\'],
dtype=\'datetime64[ns]\', freq=\'D\')
# 3、freq还可以赋值数字+字母:表示间隔为几个单位,如freq=\'2D\' 表示间隔2日
pd.date_range(start=\'2022-04-01\',end=\'2022-04-11\',freq=\'2D\')
输出:
DatetimeIndex([\'2022-04-01\', \'2022-04-03\', \'2022-04-05\', \'2022-04-07\',
\'2022-04-09\', \'2022-04-11\'],
dtype=\'datetime64[ns]\', freq=\'2D\')
# 4、closed表示日期是否包含左右边界日期;如下语句,包含右边日期,但不包含左边日期,结果显示也没有2022-04-01的
pd.date_range(start=\'2022-04-01\',end=\'2022-04-11\',freq=\'2D\',closed=\'right\')
输出:
DatetimeIndex([\'2022-04-03\', \'2022-04-05\', \'2022-04-07\', \'2022-04-09\',
\'2022-04-11\'],
dtype=\'datetime64[ns]\', freq=\'2D\')
# 5、freq=\'M\' 表示以月为最小单位 显示的是每月最后一天
pd.date_range(start=\'2022-04-01\',end=\'2022-05-31\',freq=\'M\')
输出:
DatetimeIndex([\'2022-04-30\', \'2022-05-31\'], dtype=\'datetime64[ns]\', freq=\'M\')
# 5.2、如果不想要最后的日,可以利用to_period(\'M\')将其不显示
pd.date_range(start=\'2022-04-01\',end=\'2022-05-31\',freq=\'M\').to_period(\'M\')
输出:
PeriodIndex([\'2022-04\', \'2022-05\'], dtype=\'period[M]\', freq=\'M\')
# 6、freq=\'QS\' 季度的第一天
pd.date_range(start=\'2022-01-01\',end=\'2022-12-31\',freq=\'QS\')
输出:
DatetimeIndex([\'2022-01-01\', \'2022-04-01\', \'2022-07-01\', \'2022-10-01\'], dtype=\'datetime64[ns]\', freq=\'QS-JAN\')
# 9、freq=\'H\' 时 start=\'2022-04-01\',end=\'2022-04-02\' 表示的只是1号的24小时
pd.date_range(start=\'2022-04-01\',end=\'2022-04-02\',freq=\'6H\')
输出:
DatetimeIndex([\'2022-04-01 00:00:00\', \'2022-04-01 06:00:00\',
\'2022-04-01 12:00:00\', \'2022-04-01 18:00:00\',
\'2022-04-02 00:00:00\'],
dtype=\'datetime64[ns]\', freq=\'6H\')
pd.date_range(start=\'2022-04-01\',end=\'2022-04-02\',freq=\'6H\',closed=\'right\')
输出: 左开右闭 指的是不包含2022-04-01 00:00:00 包含2022-04-02 00:00:00
DatetimeIndex([\'2022-04-01 06:00:00\', \'2022-04-01 12:00:00\',
\'2022-04-01 18:00:00\', \'2022-04-02 00:00:00\'],
dtype=\'datetime64[ns]\', freq=\'6H\')
重新采样,是对原样本重新处理的一个方法,是一个对常规时间序列数据重新采样和频率转换的便捷的方法。
用这个方法之前需将日期作为索引并转化为日期型索引
DataFrame.resample(rule,label=None).sum()等函数 两个指标足以
rule : 重构规则(\'M\'、\'2D\'等上图所示)
label:指定,我们使用哪一个作为新的label 区间的左还是右 默认左
np.random.seed(20) #保证每次生成的随机数都一样
dt = pd.date_range(start=\'2022-01-01\',end=\'2022-04-30\',freq=\'D\')
num = np.random.randint(100,200,120)
df = pd.DataFrame(num,index=dt,columns=[\'num\'])
df.index # 看看索引类型 DatetimeIndex 日期型索引
DatetimeIndex([\'2022-01-01\', \'2022-01-02\', \'2022-01-03\', \'2022-01-04\',
\'2022-01-05\', \'2022-01-06\', \'2022-01-07\', \'2022-01-08\',
\'2022-01-09\', \'2022-01-10\',
...
\'2022-04-21\', \'2022-04-22\', \'2022-04-23\', \'2022-04-24\',
\'2022-04-25\', \'2022-04-26\', \'2022-04-27\', \'2022-04-28\',
\'2022-04-29\', \'2022-04-30\'],
dtype=\'datetime64[ns]\', length=120, freq=\'D\')
# 将日期索引重新采样为 每月的第一天为一组 进行求和
df.resample(\'MS\').sum()
num
2022-01-01 4647
2022-02-01 4181
2022-03-01 4505
2022-04-01 4489
# 不显示日期后的日
df.resample(\'M\').sum().to_period(\'M\')
num
2022-01 4647
2022-02 4181
2022-03 4505
2022-04 4489
# 按季度分组求和
df.resample(\'Q\').sum()
num
2022-03-31 13333
2022-06-30 4489
# .to_period(\'Q\') 按季度显示 格式xxxxQn xxxx年Qn季度
df.resample(\'Q\').sum().to_period(\'Q\')
num
2022Q1 13333
2022Q2 4489
to_period(\'\')描述的是该日期处于那个时期
例如to_period(\'M\') 将日期以月为单位即 xxxx-xx 某天处于某个月分
# 生成日期
dt = pd.date_range(start=\'2021-04-01\',end=\'2023-04-30\',freq=\'100D\')
DatetimeIndex([\'2021-04-01\', \'2021-07-10\', \'2021-10-18\', \'2022-01-26\',
\'2022-05-06\', \'2022-08-14\', \'2022-11-22\', \'2023-03-02\'],
dtype=\'datetime64[ns]\', freq=\'100D\')
# 处于某年
dt.to_period(\'Y\')
PeriodIndex([\'2021\', \'2021\', \'2021\', \'2022\', \'2022\', \'2022\', \'2022\', \'2023\'], dtype=\'period[A-DEC]\', freq=\'A-DEC\')
# 处于某月
dt.to_period(\'M\')
PeriodIndex([\'2021-04\', \'2021-07\', \'2021-10\', \'2022-01\', \'2022-05\', \'2022-08\',
\'2022-11\', \'2023-03\'],
dtype=\'period[M]\', freq=\'M\')
# 处于某个季度
dt.to_period(\'Q\')
PeriodIndex([\'2021Q2\', \'2021Q3\', \'2021Q4\', \'2022Q1\', \'2022Q2\', \'2022Q3\',
\'2022Q4\', \'2023Q1\'],
dtype=\'period[Q-DEC]\', freq=\'Q-DEC\')
你的编程能力从什么时候开始突飞猛进? 我的回答:2013年,我开始喜欢编程了。
Android的SharePreferences存储的案例(qq账号存储)
使用TeXLive2022和VSCode安装配置步骤(LaTeX写论文)
ASP.NET Core构建OData查询Restful API
7 Papers & Radios | 陈丹琦关系抽取新SOTA;上海交大医疗版MNIST数据集
焱融全闪 X NVIDIA InfiniBand:打造 AI 时代 GPU 计算的高性能存储技术
【云原生Kubernetes系列第五篇】kubeadm v1.20 部署K8S 集群架构(人生这道选择题,总会有遗憾)