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的类方法和静态方法
Dec 13 Python
打包发布Python模块的方法详解
Sep 18 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
Mar 16 Python
django中send_mail功能实现详解
Feb 06 Python
Python中一行和多行import模块问题
Apr 01 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
Apr 27 Python
Python图像处理之简单画板实现方法示例
Aug 30 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
Jun 18 Python
Django项目之Elasticsearch搜索引擎的实例
Aug 21 Python
解决Python使用列表副本的问题
Dec 19 Python
Python字符串hashlib加密模块使用案例
Mar 10 Python
教你如何使用Python开发一个钉钉群应答机器人
Jun 21 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
ThinkPHP框架实现session跨域问题的解决方法
2014/07/01 PHP
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
PHP获取一年中每个星期的开始和结束日期的方法
2015/02/12 PHP
微信支付PHP SDK之微信公众号支付代码详解
2015/12/09 PHP
php-app开发接口加密详解
2018/04/18 PHP
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
jQuery获取Select选择的Text和Value(详细汇总)
2013/01/25 Javascript
JS二维数组的定义说明
2014/03/03 Javascript
Javascript通过overflow控制列表闭合与展开的方法
2015/05/15 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
AngularJS 路由详解和简单实例
2016/07/28 Javascript
解决JQuery全选/反选第二次失效的问题
2017/10/11 jQuery
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
nodejs开发一个最简单的web服务器实例讲解
2020/01/02 NodeJs
JS面向对象之单选框实现
2020/01/17 Javascript
小谈angular ng deploy的实现
2020/04/07 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
2020/11/07 Javascript
八大排序算法的Python实现
2021/01/28 Python
django站点管理详解
2017/12/12 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
NumPy中的维度Axis详解
2019/11/26 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
2020/04/20 Python
JOSEPH官网:英国奢侈时尚品牌
2018/01/31 全球购物
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
应届生幼儿园求职信
2013/11/12 职场文书
毕业生就业意向书
2014/04/01 职场文书
我读书我快乐演讲稿
2014/05/07 职场文书
反对邪教标语
2014/06/30 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
群众路线剖析材料范文
2014/10/09 职场文书
python 破解加密zip文件的密码
2021/04/22 Python
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL
WIN10使用IIS部署ftp服务器详细教程
2022/08/05 Servers