python DateTimeIndex

时间戳索引   DateTimeIndex 👇

DateTimeIndex 和TimeSeries 时间序列
dts = pd.DatetimeIndex([‘2019-10-10’,‘2019-10-11’,‘2019-10-12’,‘2019-10-13’])

#-----输出-----#
DatetimeIndex([‘2019-10-10’, ‘2019-10-11’, ‘2019-10-12’, ‘2019-10-13’], dtype=‘datetime64[ns]’, freq=None)
👆 直接 生成|实例化 一个 时间序列 DateTimeIndex ,支持类型包括 : str ,datetime.datetime

复制代码
times = pd.Series(np.random.rand(len(dts)),index=dts)

#-----输出----#
2019-10-10 0.185203
2019-10-11 0.925192
2019-10-12 0.103523
2019-10-13 0.734690
dtype: float64
复制代码
👆 时间序列,以 DateTimeIndex 为 index 的Series (以时间戳为索引的Series)

👇 pd.date_range() - 时间范围 , 生成时间范围列表 ,参数start ,end :

dg = pd.date_range(‘2019-10-01’,‘2019-10-10’) #默认按 ‘天’ 生成
dg1 = pd.date_range(start=dt.datetime.now(),periods=10) #periods 生成时间个数,从开始时间算
dg2 = pd.date_range(‘2019-10-01’,‘2019-10-05’,periods=10) #时长不够 则按h划分
复制代码
DatetimeIndex([‘2019-10-01’, ‘2019-10-02’, ‘2019-10-03’, ‘2019-10-04’,
‘2019-10-05’, ‘2019-10-06’, ‘2019-10-07’, ‘2019-10-08’,
‘2019-10-09’, ‘2019-10-10’],
dtype=‘datetime64[ns]’, freq=‘D’)
DatetimeIndex([‘2019-11-06 02:30:23.148685’, ‘2019-11-07 02:30:23.148685’,
‘2019-11-08 02:30:23.148685’, ‘2019-11-09 02:30:23.148685’,
‘2019-11-10 02:30:23.148685’, ‘2019-11-11 02:30:23.148685’,
‘2019-11-12 02:30:23.148685’, ‘2019-11-13 02:30:23.148685’,
‘2019-11-14 02:30:23.148685’, ‘2019-11-15 02:30:23.148685’],
dtype=‘datetime64[ns]’, freq=‘D’)
DatetimeIndex([‘2019-10-01 00:00:00’, ‘2019-10-01 10:40:00’,
‘2019-10-01 21:20:00’, ‘2019-10-02 08:00:00’,
‘2019-10-02 18:40:00’, ‘2019-10-03 05:20:00’,
‘2019-10-03 16:00:00’, ‘2019-10-04 02:40:00’,
‘2019-10-04 13:20:00’, ‘2019-10-05 00:00:00’],
dtype=‘datetime64[ns]’, freq=None)
复制代码
date_range() 的一些参数说明 :

复制代码
start : 开始时间
end : 结束时间
periods : 生成时间数量
freq : 频率 按频率生成 设置为s 为秒 ,h ,d ,m , y
#normalize : 转换成午夜时间 设置为True 时,默认去除 时分秒
#closed : 时期区间的闭合 closed =‘left’ 左闭合 默认为None 全闭
复制代码
时间频率 timeseries.offset_aliases – freq 参数 :

复制代码

常见常用参数 :

freq 默认为"D" 每天
B 每个工作日
H 每小时
M 每个月的最后一天
T T/Min 每分钟
Q-DEC 指定某月为季度末,每个季度的最后一个月的最后一日
S 每秒钟
L 每毫秒 (千分之一秒)
U 每微秒 (百万分之一秒)
复制代码
print(pd.date_range(‘2019/1/1’,‘2019/2/1’,freq=‘W-Mon’))

#-----输出-----#
DatetimeIndex([‘2019-01-07’, ‘2019-01-14’, ‘2019-01-21’, ‘2019-01-28’], dtype=‘datetime64[ns]’, freq=‘W-MON’)
👆 W-MON :从指定星期几开始算起,每周的星期几
👆 星期几缩写 : mon / tue / wed / thu / fri / sat / sun

print(pd.date_range(‘2019/1/1’,‘2019/5/1’,freq=‘WOM-2MON’))

#-----输出-----#
DatetimeIndex([‘2019-01-14’, ‘2019-02-11’, ‘2019-03-11’, ‘2019-04-08’], dtype=‘datetime64[ns]’, freq=‘WOM-2MON’)
👆 WON-2MON ,每月的第几个星期几开始算,这里是每月第二个星期一

复合频率 话不多说,直接看例子 :

复制代码
ad = pd.date_range(‘2019-10-10’,‘2019-10-31’,freq=‘7D’) # 每隔7天生成一个

#------输出-----#
DatetimeIndex([‘2019-10-10’, ‘2019-10-17’, ‘2019-10-24’, ‘2019-10-31’], dtype=‘datetime64[ns]’, freq=‘7D’)

ad = pd.date_range(‘2019-10-10’,‘2019-10-11’,freq=‘2H30MIN’) #每隔2h30min生成一个

#-----输出-----#
DatetimeIndex([‘2019-10-10 00:00:00’, ‘2019-10-10 02:30:00’,
‘2019-10-10 05:00:00’, ‘2019-10-10 07:30:00’,
‘2019-10-10 10:00:00’, ‘2019-10-10 12:30:00’,
‘2019-10-10 15:00:00’, ‘2019-10-10 17:30:00’,
‘2019-10-10 20:00:00’, ‘2019-10-10 22:30:00’],
dtype=‘datetime64[ns]’, freq=‘150T’)
复制代码
时刻频率的改变 : 例如 :

复制代码
ts = pd.Series(np.random.rand(5),index=pd.date_range(‘2019-1-1’,periods=5,freq=‘H’))

#-----输出-----#
2019-01-01 00:00:00 0.235263
2019-01-01 01:00:00 0.116529
2019-01-01 02:00:00 0.475352
2019-01-01 03:00:00 0.285782
2019-01-01 04:00:00 0.278366
Freq: H, dtype: float64
复制代码
👆 如何把 上方的频率 H 降频 为min , s 或者其他呢? 用 .asfreq() 方法

复制代码
ts.asfreq(‘2H’)

#-----输出-----#
2019-01-01 00:00:00 235.263032
2019-01-01 02:00:00 475.352441
2019-01-01 04:00:00 278.366048
Freq: 2H, dtype: float64

ts.asfreq(‘30min’)
#-----输出-----#
2019-01-01 00:00:00 235.263032
2019-01-01 00:30:00 NaN
2019-01-01 01:00:00 116.529416
2019-01-01 01:30:00 NaN
2019-01-01 02:00:00 475.352441
2019-01-01 02:30:00 NaN
2019-01-01 03:00:00 285.781654
2019-01-01 03:30:00 NaN
2019-01-01 04:00:00 278.366048
Freq: 30T, dtype: float64
复制代码
👆 当超频时,默认为NaN,通过 method = ‘ffill’ 时 向前填充 , bfill 时向后填充.

超前 和 滞后 :数据值相对索引自定义向前后移动 : .shift()

复制代码
ts.shift(1)

#-----输出-----#
2019-01-01 00:00:00 NaN
2019-01-01 01:00:00 0.517237
2019-01-01 02:00:00 0.152740
2019-01-01 03:00:00 0.790932
2019-01-01 04:00:00 0.988369
Freq: H, dtype: float64
复制代码

👆 : 值为正数 值往后面挪动 , 值为负数 值往前挪动 .也可以理解为时间移动了,其实是值移动了.

👆 : 有个很强大的功能,例如 : 计算当前值和上一次值的变化百分比

复制代码
ts = ts * 1000
print(ts/ts.shift(1)-1)

#-----输出-----#
2019-01-01 00:00:00 NaN
2019-01-01 01:00:00 -0.504685
2019-01-01 02:00:00 3.079248
2019-01-01 03:00:00 -0.398800
2019-01-01 04:00:00 -0.025949
Freq: H, dtype: float64
复制代码

解释 :

具体的意思就是第二天相比比第一天相比增长还是下降 ,每天的增降再Sum一下便能得到整个月的数值与上月比较涨幅 。 (今天的值除以昨天的值的再减百分之百)

分组:

https://www.cnblogs.com/luowei93/p/11878639.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值