python Pandas库基础分析之时间序列的处理详解


Posted in Python onJuly 13, 2019

前言

在使用Python进行数据分析时,经常会遇到时间日期格式处理和转换,特别是分析和挖掘与时间相关的数据,比如量化交易就是从历史数据中寻找股价的变化规律。Python中自带的处理时间的模块有datetime,NumPy库也提供了相应的方法,Pandas作为Python环境下的数据分析库,更是提供了强大的日期数据处理的功能,是处理时间序列的利器。

1、生成日期序列

主要提供pd.data_range()和pd.period_range()两个方法,给定参数有起始时间、结束时间、生成时期的数目及时间频率(freq='M'月,'D'天,‘W',周,'Y'年)等。

两种主要区别在于pd.date_range()生成的是DatetimeIndex格式的日期序列;pd.period_range()生成的是PeriodIndex格式的日期序列。

以下通过生成月时间序列和周时间序列来对比下:

date_rng = pd.date_range('2019-01-01', freq='M', periods=12)
print(f'month date_range():
{date_rng}')
"""
date_range():
DatetimeIndex(['2019-01-31', '2019-02-28', '2019-03-31', '2019-04-30',
 '2019-05-31', '2019-06-30', '2019-07-31', '2019-08-31',
 '2019-09-30', '2019-10-31', '2019-11-30', '2019-12-31'],
 dtype='datetime64[ns]', freq='M')
"""
period_rng = pd.period_range('2019/01/01', freq='M', periods=12)
print(f'month period_range():
{period_rng}')
"""
period_range():
PeriodIndex(['2019-01', '2019-02', '2019-03', '2019-04', '2019-05', '2019-06',
 '2019-07', '2019-08', '2019-09', '2019-10', '2019-11', '2019-12'],
 dtype='period[M]', freq='M')
"""
date_rng = pd.date_range('2019-01-01', freq='W-SUN', periods=12)
print(f'week date_range():
{date_rng}')
"""
week date_range():
DatetimeIndex(['2019-01-06', '2019-01-13', '2019-01-20', '2019-01-27',
 '2019-02-03', '2019-02-10', '2019-02-17', '2019-02-24',
 '2019-03-03', '2019-03-10', '2019-03-17', '2019-03-24'],
 dtype='datetime64[ns]', freq='W-SUN')
"""
period_rng=pd.period_range('2019-01-01',freq='W-SUN',periods=12)
print(f'week period_range():
{period_rng}')
"""
week period_range():
PeriodIndex(['2018-12-31/2019-01-06', '2019-01-07/2019-01-13',
 '2019-01-14/2019-01-20', '2019-01-21/2019-01-27',
 '2019-01-28/2019-02-03', '2019-02-04/2019-02-10',
 '2019-02-11/2019-02-17', '2019-02-18/2019-02-24',
 '2019-02-25/2019-03-03', '2019-03-04/2019-03-10',
 '2019-03-11/2019-03-17', '2019-03-18/2019-03-24'],
 dtype='period[W-SUN]', freq='W-SUN')
"""
date_rng = pd.date_range('2019-01-01 00:00:00', freq='H', periods=12)
print(f'hour date_range():
{date_rng}')
"""
hour date_range():
DatetimeIndex(['2019-01-01 00:00:00', '2019-01-01 01:00:00',
 '2019-01-01 02:00:00', '2019-01-01 03:00:00',
 '2019-01-01 04:00:00', '2019-01-01 05:00:00',
 '2019-01-01 06:00:00', '2019-01-01 07:00:00',
 '2019-01-01 08:00:00', '2019-01-01 09:00:00',
 '2019-01-01 10:00:00', '2019-01-01 11:00:00'],
 dtype='datetime64[ns]', freq='H')
"""
period_rng=pd.period_range('2019-01-01 00:00:00',freq='H',periods=12)
print(f'hour period_range():
{period_rng}')
"""
hour period_range():
PeriodIndex(['2019-01-01 00:00', '2019-01-01 01:00', '2019-01-01 02:00',
 '2019-01-01 03:00', '2019-01-01 04:00', '2019-01-01 05:00',
 '2019-01-01 06:00', '2019-01-01 07:00', '2019-01-01 08:00',
 '2019-01-01 09:00', '2019-01-01 10:00', '2019-01-01 11:00'],
 dtype='period[H]', freq='H')
"""

2、生成Timestamp对象及转换

创建一个Timestamp时间戳对象有pd.Timestamp()方法和pd.to_datetime()方法。如下所示:

ts=pd.Timestamp(2019,1,1)
print(f'pd.Timestamp()-1:{ts}')
#pd.Timestamp()-1:2019-01-01 00:00:00
ts=pd.Timestamp(dt(2019,1,1,hour=0,minute=1,second=1))
print(f'pd.Timestamp()-2:{ts}')
#pd.Timestamp()-2:2019-01-01 00:01:01
ts=pd.Timestamp("2019-1-1 0:1:1")
print(f'pd.Timestamp()-3:{ts}')
#pd.Timestamp()-3:2019-01-01 00:01:01
print(f'pd.Timestamp()-type:{type(ts)}')
#pd.Timestamp()-type:<class 'pandas._libs.tslibs.timestamps.Timestamp'>
#dt=pd.to_datetime(2019,1,1) 不支持
dt=pd.to_datetime(dt(2019,1,1,hour=0,minute=1,second=1))
print(f'pd.to_datetime()-1:{dt}')
#pd.to_datetime()-1:2019-01-01 00:01:01
dt=pd.to_datetime("2019-1-1 0:1:1")
print(f'pd.to_datetime()-2:{dt}')
#pd.to_datetime()-2:2019-01-01 00:01:01
print(f'pd.to_datetime()-type:{type(dt)}')
#pd.to_datetime()-type:<class 'pandas._libs.tslibs.timestamps.Timestamp'>
#pd.to_datetime生成自定义时间序列
dtlist=pd.to_datetime(["2019-1-1 0:1:1", "2019-3-1 0:1:1"])
print(f'pd.to_datetime()-list:{dtlist}')
#pd.to_datetime()-list:DatetimeIndex(['2019-01-01 00:01:01', '2019-03-01 00:01:01'], dtype='datetime64[ns]', freq=None)
#时间戳转换为period月时期
pr = ts.to_period('M')
print(f'ts.to_period():{pr}')
#ts.to_period():2019-01
print(f'pd.to_period()-type:{type(pr)}')
#pd.to_period()-type:<class 'pandas._libs.tslibs.period.Period'>

3、生成period对象及转换

#定义时期period
per=pd.Period('2019')
print(f'pd.Period():{per}')
#pd.Period():2019
per_del=pd.Period('2019')-pd.Period('2018')
print(f'2019和2018间隔{per_del}年')#可以直接+、-整数(代表年)
#2019和2018间隔1年
#时期转换为时间戳
print(per.to_timestamp(how='end'))#2019-12-31 00:00:00
print(per.to_timestamp(how='start'))#2019-01-01 00:00:00

4、生成时间间隔Timedelta

#生成时间间隔Timedelta
print(pd.Timedelta(days=5, minutes=50, seconds=20, milliseconds=10, microseconds=10, nanoseconds=10))
#5 days 00:50:20.010010
#获取当前时间
now=pd.datetime.now()
#计算当前时间往后50天的日期
dt=now+pd.Timedelta(days=50)
print(f'当前时间是{now}, 50天后时间是{dt}')
#当前时间是2019-06-08 17:59:31.726065, 50天后时间是2019-07-28 17:59:31.726065
#只显示年月日
print(dt.strftime('%Y-%m-%d'))#2019-07-28

5、重采样及频率转换

#asfreq 按季度显示索引值
#'DatetimeIndex' object has no attribute 'asfreq'
date=pd.date_range('1/1/2018', periods=20, freq='D')
tsdat_series=pd.Series(range(20),index=date)
tsp_series=tsdat_series.to_period('D')
print(tsp_series.index.asfreq('Q'))
date=pd.period_range('1/1/2018', periods=20, freq='D')
tsper_series=pd.Series(range(20),index=date)
print(tsper_series.index.asfreq('Q'))
"""
PeriodIndex(['2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1',
 '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1',
 '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1',
 '2018Q1', '2018Q1'],
 dtype='period[Q-DEC]', freq='Q-DEC')
"""
#resample 按季度统计并显示
print(tsdat_series.resample('Q').sum().to_period('Q'))
"""
2018Q1 190
Freq: Q-DEC, dtype: int64
"""
#groupby 按周进行汇总求平均值
print(tsdat_series.groupby(lambda x:x.weekday).mean())
"""
0 7.0
1 8.0
2 9.0
3 10.0
4 11.0
5 12.0
6 9.5
dtype: float64
"""

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
利用Python实现简单的相似图片搜索的教程
Apr 23 Python
python通过ssh-powershell监控windows的方法
Jun 02 Python
python检测是文件还是目录的方法
Jul 03 Python
Python之批量创建文件的实例讲解
May 10 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
May 22 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
Jan 03 Python
创建Django项目图文实例详解
Jun 06 Python
用pycharm开发django项目示例代码
Jun 13 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
Jul 23 Python
在PyTorch中使用标签平滑正则化的问题
Apr 03 Python
python2.7使用scapy发送syn实例
May 05 Python
简单了解python反射机制的一些知识
Jul 13 #Python
Python3内置模块之base64编解码方法详解
Jul 13 #Python
Python3enumrate和range对比及示例详解
Jul 13 #Python
基于Python的ModbusTCP客户端实现详解
Jul 13 #Python
Python Numpy库datetime类型的处理详解
Jul 13 #Python
Python3内置模块random随机方法小结
Jul 13 #Python
简单了解python的一些位运算技巧
Jul 13 #Python
You might like
浅析51个PHP处理字符串的函数
2013/08/02 PHP
PHP中Fatal error session_start()错误解决步骤
2014/08/05 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
利用jQuary实现文字浮动提示效果示例代码
2013/12/26 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
分享20款美化网站的 jQuery Lightbox 灯箱插件
2014/10/10 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
Bootstrap学习笔记 轮播(Carousel)插件
2017/03/21 Javascript
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
浅析JS中什么是自定义react数据验证组件
2018/10/19 Javascript
详解Nodejs get获取远程服务器接口数据
2019/03/26 NodeJs
JavaScript 自定义html元素鼠标右键菜单功能
2019/12/02 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
angular *Ngif else用法详解
2020/12/15 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
Django1.3添加app提示模块不存在的解决方法
2014/08/26 Python
详细介绍Python的鸭子类型
2016/09/12 Python
python中ASCII码和字符的转换方法
2018/07/09 Python
聊聊python里如何用Borg pattern实现的单例模式
2019/06/06 Python
python 用户交互输入input的4种用法详解
2019/09/24 Python
Python 用turtle实现用正方形画圆的例子
2019/11/21 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
2020/03/10 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
Pycharm安装Qt Design快捷工具的详细教程
2020/11/18 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
如何转换一个字符串到enum值
2014/04/12 面试题
物流专业求职计划书
2014/01/10 职场文书
超市总经理岗位职责
2014/02/02 职场文书
幼儿园区域活动总结
2014/05/08 职场文书
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
2014小学一年级班主任工作总结
2014/12/05 职场文书
村党总支部公开承诺书2016
2016/03/25 职场文书
家电创业计划书
2019/08/05 职场文书
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
2021/05/12 Python