Pandas时间序列基础详解(转换,索引,切片)


Posted in Python onFebruary 26, 2020

时间序列的类型:

时间戳:具体的时刻

固定的时间区间:例如2007年的1月或整个2010年

时间间隔:由开始时间和结束时间表示,时间区间可以被认为是间隔的特殊情况

实验时间和消耗时间:每个时间是相对于特定开始时间的时间的量度,(例如自从被放置在烤箱中每秒烘烤的饼干的直径)

日期和时间数据的类型及工具

datetime模块中的类型:

date   使用公历日历存储日历日期(年,月,日) 
time   将时间存储为小时,分钟,秒,微秒
datetime  存储日期和时间
timedelta  表示两个datetime值之间的差(如日,秒,微秒)
tzinfo  用于存储时区信息的基本类型

from datetime import datetime
now = datetime.now()
now.year  #当时年份
now.month  #当前月份
now.day  #当前天
now.time()  #当前时间
datetime.time(12, 27, 41, 303676)

 两个时间戳运算得到一个timedelta(时间差)类型

日期时间差 timedelta类型

from datetime import timedelta

start = datetime(2019,2,5)
start + timedelta(20)  #默认为天
datetime.datetime(2019, 2, 25, 0, 0)

字符串和datetime互相转换

date.strptime方法将字符串转换为时间

values = '2019-8-9'
datetime.strptime(values,'%Y-%m-%d')  #是在已知格式的前提下转换日期的好方式
datetime.datetime(2019, 8, 9, 0, 0)

datestrs = ['2019-8-7','2019-8-9']
[datetime.strptime(values,'%Y-%m-%d') for values in datestrs]
[datetime.datetime(2019, 8, 7, 0, 0), datetime.datetime(2019, 8, 9, 0, 0)]

更为通用的日期转换格式

from dateutil.parser import parse
parse(values)
datetime.datetime(2019, 8, 9, 0, 0)
parse('8,5,2018',dayfirst=True) #dayfirst参数 第一个元素是天
datetime.datetime(2018, 5, 8, 0, 0)

pd.to_datetime() 用于轴索引或DataFrame的列

pd.to_datetime(datestrs)
DatetimeIndex(['2019-08-07', '2019-08-09'], dtype='datetime64[ns]', freq=None)

更为简单的转换

datetime(2019,1,1)
datetime.datetime(2019, 1, 1, 0, 0)

时间序列的算术运算(在日期上自动对齐)

index = pd.date_range('3/3/2018',periods=20)
ts = pd.Series(np.random.randn(20),index=index)
ts
2018-03-03 0.611591
2018-03-04 0.119168
2018-03-05 0.514390
2018-03-06 1.010600
2018-03-07 0.181763
2018-03-08 -0.290964
2018-03-09 0.252927
2018-03-10 -1.645692
2018-03-11 -0.500014
2018-03-12 -1.247355​

ts1 = ts[::2]
2018-03-03 0.611591
2018-03-05 0.514390
2018-03-07 0.181763
2018-03-09 0.252927
2018-03-11 -0.500014
2018-03-13 -0.122307
2018-03-15 0.361237
2018-03-17 -1.894853
2018-03-19 -1.608989
2018-03-21 1.274982
Freq: 2D, dtype: float64

ts + ts1
2018-03-03 1.223183
2018-03-04  NaN
2018-03-05 1.028781
2018-03-06  NaN
2018-03-07 0.363526
2018-03-08  NaN
2018-03-09 0.505853
2018-03-10  NaN
2018-03-11 -1.000028
2018-03-12  NaN
2018-03-13 -0.244613
2018-03-14  NaN
2018-03-15 0.722473
2018-03-16  NaN
2018-03-17 -3.789707
2018-03-18  NaN
2018-03-19 -3.217979
2018-03-20  NaN
2018-03-21 2.549963
2018-03-22  NaN

ts.index.dtype  #数据;类型在纳秒级的分辨率下存储时间戳
dtype('<M8[ns]')

ts.index[0]  #datetimeindex中的标量值是一个时间戳(timestamp)
Timestamp('2018-03-03 00:00:00', freq='D')

时间序列的索引,选择,子集

时间序列的索引

ts = pd.Series(np.random.randn(1000),index = pd.date_range('1/1/2016',periods=1000))

s['2018-6'] #时间序列的索引 也可用ts.loc[]
2018-06-01 1.371843
2018-06-02 -0.356041
2018-06-03 0.111452
2018-06-04 0.325222
2018-06-05 -0.863138
2018-06-06 -0.115909
2018-06-07 0.062894
2018-06-08 0.223712

时间序列的切片

ts['2018-9-23':]  #时间序列的切片
2018-09-23 0.005519
2018-09-24 -1.374038
2018-09-25 1.769112
2018-09-26 -0.000306
Freq: D, dtype: float64

ts.truncate(before='2018-9-24')  #使用truncate方法向后切片
2018-09-24 -1.374038
2018-09-25 1.769112
2018-09-26 -0.000306
Freq: D, dtype: float64

ts.truncate(after='2016-1-4')  #向前切片
2016-01-01 -1.776334
2016-01-02 -0.488550
2016-01-03 -1.299889
2016-01-04 -1.883413
Freq: D, dtype: float64

含有重复索引的时间序列的分组处理

index = pd.DatetimeIndex(['1/1/2017','1/1/2017','1/2/2017','1/3/2017'])
dup_ta = pd.Series(np.arange(4),index=index)
dup_ta
2017-01-01 0
2017-01-01 1
2017-01-02 2
2017-01-03 3
dtype: int32

dup_ta.groupby(level=0).mean()

以上这篇Pandas时间序列基础详解(转换,索引,切片)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python解析json实例方法
Nov 19 Python
python中利用xml.dom模块解析xml的方法教程
May 24 Python
Python操作MySQL数据库的方法
Jun 20 Python
利用python GDAL库读写geotiff格式的遥感影像方法
Nov 29 Python
对python打乱数据集中X,y标签对的方法详解
Dec 14 Python
Python基于mysql实现学生管理系统
Feb 21 Python
python中PS 图像调整算法原理之亮度调整
Jun 28 Python
在python中做正态性检验示例
Dec 09 Python
scrapy处理python爬虫调度详解
Nov 23 Python
Python常用GUI框架原理解析汇总
Dec 07 Python
Python LMDB库的使用示例
Feb 14 Python
如何用python绘制雷达图
Apr 24 Python
Python图像处理库PIL的ImageFont模块使用介绍
Feb 26 #Python
Python利用FFT进行简单滤波的实现
Feb 26 #Python
Python图像处理库PIL的ImageGrab模块介绍详解
Feb 26 #Python
Python图像处理库PIL的ImageDraw模块介绍详解
Feb 26 #Python
PIL包中Image模块的convert()函数的具体使用
Feb 26 #Python
Pandas —— resample()重采样和asfreq()频度转换方式
Feb 26 #Python
python实现银行实战系统
Feb 26 #Python
You might like
php include加载文件两种方式效率比较
2010/08/08 PHP
php性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
php命名空间学习详解
2014/02/27 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
php实现的简单日志写入函数
2015/03/31 PHP
整理php防注入和XSS攻击通用过滤
2015/09/13 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
2018/08/07 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
2008/12/25 Javascript
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
GreyBox技术总结(转)
2010/11/23 Javascript
纯js简单日历实现代码
2013/10/05 Javascript
深入理解Javascript里的依赖注入
2014/03/19 Javascript
JavaScript制作的可折叠弹出式菜单示例
2014/04/04 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
JavaScript实现cookie的写入、读取、删除功能
2015/11/05 Javascript
jQuery实现的倒计时效果实例小结
2016/04/16 Javascript
Javascript基础_嵌入图像的简单实现
2016/06/14 Javascript
解决同一页面中两个iframe互相调用jquery,js函数的方法
2016/12/12 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
JavaScript运动框架 解决速度正负取整问题(一)
2017/05/17 Javascript
详解前后端分离之VueJS前端
2017/05/24 Javascript
vue配置nprogress实现页面顶部进度条
2019/09/21 Javascript
京东优选小程序的实现代码示例
2020/02/25 Javascript
微信小程序拖拽排序列表的示例代码
2020/07/08 Javascript
Pycharm远程调试openstack的方法
2017/11/21 Python
python3之模块psutil系统性能信息使用
2018/05/30 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
pandas计数 value_counts()的使用
2019/06/24 Python
小学生综合素质评语
2014/04/23 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
实习班主任自我评价
2015/03/11 职场文书
出国留学单位推荐信
2015/03/26 职场文书
新年寄语2016
2015/08/17 职场文书
听课评课活动心得体会
2016/01/15 职场文书
Oracle创建只读账号的详细步骤
2021/06/07 Oracle