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程序添加图形化界面的教程
Apr 29 Python
Python捕捉和模拟鼠标事件的方法
Jun 03 Python
我喜欢你 抖音表白程序python版
Apr 07 Python
Python 3.8中实现functools.cached_property功能
May 29 Python
python+openCV利用摄像头实现人员活动检测
Jun 22 Python
Django框架表单操作实例分析
Nov 04 Python
python装饰器代替set get方法实例
Dec 19 Python
tensorflow自定义激活函数实例
Feb 04 Python
python 使用递归实现打印一个数字的每一位示例
Feb 27 Python
python实现自动打卡的示例代码
Oct 10 Python
Pandas的数据过滤实现
Jan 15 Python
Python实战之OpenCV实现猫脸检测
Jun 26 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写入WRITE编码为UTF8的文件的实现代码
2008/07/07 PHP
php下intval()和(int)转换使用与区别
2008/07/18 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
php实现图片缩放功能类
2013/12/18 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
$.ajax json数据传递方法
2008/11/19 Javascript
js实现的日期操作类DateTime函数代码
2010/03/16 Javascript
JavaScript基础知识之数据类型
2012/08/06 Javascript
JavaScript中setAttribute用法介绍
2013/07/20 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
Javascript 中创建自定义对象的方法汇总
2014/12/04 Javascript
javascript记住用户名和登录密码(两种方式)
2015/08/04 Javascript
Jquery数字上下滚动动态切换插件
2015/08/08 Javascript
JavaScript中const、var和let区别浅析
2016/10/11 Javascript
页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)
2017/08/29 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
2018/07/20 Javascript
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
小程序如何定位所在城市及发起周边搜索
2020/02/11 Javascript
React实现类似淘宝tab居中切换效果的示例代码
2020/06/02 Javascript
写了个监控nginx进程的Python脚本
2012/05/10 Python
python图像处理之反色实现方法
2015/05/30 Python
Python实现控制台中的进度条功能代码
2017/12/22 Python
Python解决八皇后问题示例
2018/04/22 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
PyQt5笔记之弹出窗口大全
2019/06/20 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
2019/08/20 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
2020/02/15 Python
python如何提升爬虫效率
2020/09/27 Python
Araks官网:纽约内衣品牌
2020/10/15 全球购物
专科毕业生学习生活的自我评价
2013/10/26 职场文书
师范学院毕业生求职信范文
2013/12/26 职场文书
学校副校长四风对照检查材料整改措施
2014/09/25 职场文书
大学生军训感言
2015/08/01 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书