python时序数据处理2--提取年月信息、时间作差等
2021/6/19 14:28:21
本文主要是介绍python时序数据处理2--提取年月信息、时间作差等,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
同样首先先生成时序数据
1.生成时序数据
import pandas as pd import numpy as np from datetime import datetime,timedelta test=pd.date_range('2020-05-09', periods=50,freq='H') #生成时间序列,期数是12,时间间隔按照分钟 test[1:10]
#构造时间序列数据 ts=pd.Series(np.arange(50),index=test) ts_df=pd.DataFrame(ts,columns=['数据']) ts_df=ts_df.reset_index().rename({'index':'Time','数据':'number'},axis=1) ts_df.head()
2. 提取年月日等信息
分析时间周期或者时序特征建模的时候有用
'''分析时间周期常用''' #年 ts_df['year']=ts_df['Time'].dt.year #月 ts_df['month']=ts_df['Time'].dt.month #日 ts_df['day']=ts_df['Time'].dt.day #周内第几日 ts_df['dayofweek']=ts_df['Time'].dt.dayofweek #小时 ts_df['Hour']=ts_df['Time'].dt.hour #分钟 ts_df['minute']=ts_df['Time'].dt.minute #秒 ts_df['second']=ts_df['Time'].dt.second print(ts_df.shape) ts_df.head(3)
3.时间作差
- 直接相减
ts_df.iloc[49,0]-ts_df.iloc[0,0]
Timedelta(‘2 days 01:00:00’)
- 使用timedelta
print('原',ts_df.iloc[49,0]) print('后推10天',ts_df.iloc[49,0]+timedelta(10)) print('前推10天',ts_df.iloc[49,0]+timedelta(-10)) print('前推10天',ts_df.iloc[49,0]-timedelta(10))
timedelta函数:
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
其他操作:
#默认按天days print('原',ts_df.iloc[49,0]) print('向前推1天',ts_df.iloc[49,0]+timedelta(days=-1)) print('向前推10分钟',ts_df.iloc[49,0]+timedelta(minutes=-10)) print('向前推10小时',ts_df.iloc[49,0]+timedelta(hours=-10)) print('向前推1周',ts_df.iloc[49,0]+timedelta(weeks=-1))
4.时间采样
resample函数:
参数: resample(freq, how=None, axis=0, fill_method=None, closed=None, label=None,convention='start',kind=None, loffset=None,limit=None,base=0) 参数解释: - rule:一般填写采样频率,如'M'、‘5min',Second(15) - how:用于产生聚合值的函数名或数组函数,例如'mean'、'ohlc'、'np.max'等,默认是'mean',其他常用的值由:'first'、'last'、'median'、'max'、'min' - axis:默认0,默认是纵轴,横轴设置axis=1 - fill_method:升采样时如何插值,比如'ffill'、'bfill'等 - closed:在降采样时,各时间段的哪一段是闭合的,'right'或'left',默认'right' - label:在降采样时,如何设置聚合值的标签,例如,9:30-9:35会被标记成9:30还是9:35,默认9:30 - loffset:面元标签的时间校正值,比如‘-1s'或Second(-1)用于将聚合标签调早1秒 - limit:在向前或向后填充时,允许填充的最大时期数 - kind:聚合到时期('period')或时间戳('timestamp'),默认聚合到时间序列的索引类型 - convention:当重采样时期时,将低频率转换到高频率所采用的约定(start或end)。默认'end'
应用:
ts_t=ts_df.set_index('Time') ts_temp=pd.DataFrame(ts_t['number']) ts_temp.head(10)
每三个小时采样:
ts_temp.resample('3H').sum()
此时第一个区间为2020-05-09 00:00:00~ 2020-05-09 02:00:00 所以sum=3(3个时间数据的聚合!) 第二个区间为2020-05-09 03:00:00~ 2020-05-09 05:00:00 所以sum=12 ... 默认使用左标签(label='left'),左闭合(closed='left')
现在再添加一个类别列,达到对每一个类别进行时间采样的目的:
ts_temp['type']=np.repeat(['A','B','C','D','E'],10) ts_temp
#先按照type分组,再按照时间采样 ts_temp.groupby('type').resample('3H').sum()#.reset_index()
这篇关于python时序数据处理2--提取年月信息、时间作差等的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-04Python外包有哪些常见的主要库-icode9专业技术文章分享
- 2024-10-02基于深度学习的钢铁缺陷检测系统(yolov8、注意力机制、PyQt5界面、Python)
- 2024-10-01怎么用python搭建一个系统-icode9专业技术文章分享
- 2024-09-30Python基础入门教程
- 2024-09-30获取参数学习:Python中的基础教程
- 2024-09-30Python编程基础详解
- 2024-09-29点击加载学习:Python编程基础教程
- 2024-09-29数据科学五大Python前端库:第二部分
- 2024-09-27使用python 将ETH账户的资产打散
- 2024-09-26Python编程基础