pandas数据日期函数之date_range()、resample()与to_period()

1、date_range()

生成日期序列
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/ Yyear年 每年的最后一天
AS/YSAS/YS 每年的第一天
Mmonth 每月的最后一天
MS每月的第一天
Dday 每天
Qquarter 每季度的最后一天
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')

2、resample()

重新采样,是对原样本重新处理的一个方法,是一个对常规时间序列数据重新采样和频率转换的便捷的方法。
用这个方法之前需将日期作为索引并转化为日期型索引

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

3、to_period()

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')
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值