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高效编程技巧
Jan 07 Python
python绘图库Matplotlib的安装
Jul 03 Python
Python实现发送email的几种常用方法
Aug 18 Python
浅谈Python的Django框架中的缓存控制
Jul 24 Python
Python日期的加减等操作的示例
Aug 15 Python
对python中的for循环和range内置函数详解
Apr 17 Python
python3第三方爬虫库BeautifulSoup4安装教程
Jun 19 Python
Python3.5多进程原理与用法实例分析
Apr 05 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
Jul 22 Python
Windows系统下pycharm中的pip换源
Feb 23 Python
Python列表去重复项的N种方法(实例代码)
May 12 Python
python request 模块详细介绍
Nov 10 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
学习discuz php 引入文件的方法DISCUZ_ROOT
2009/06/21 PHP
深入解析php之apc
2013/05/15 PHP
php使用sql数据库 获取字段问题介绍
2013/08/12 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
yii实现model添加默认值的方法(2种方法)
2016/01/06 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
2016/02/26 PHP
php轻松实现文件上传功能
2016/03/03 PHP
Yii2创建控制器(createController)方法详解
2016/07/23 PHP
分享一个asp.net pager分页控件
2012/01/04 Javascript
js获取页面传来参数的方法
2014/09/06 Javascript
jQuery实现div拖拽效果实例分析
2016/02/20 Javascript
JS使用正则实现去掉字符串左右空格的方法
2016/12/27 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
nodejs学习笔记之路由
2017/03/27 NodeJs
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
JavaScript使用类似break机制中断forEach循环的方法
2018/11/13 Javascript
vue-froala-wysiwyg 富文本编辑器功能
2019/09/19 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
Vue父子组件传值的一些坑
2020/09/16 Javascript
[01:09]DOTA2次级职业联赛 - ishow.HMM战队宣传片
2014/12/01 DOTA
[02:49:21]2019完美盛典全程录像
2019/12/08 DOTA
python3图片转换二进制存入mysql
2013/12/06 Python
使用python装饰器验证配置文件示例
2014/02/24 Python
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
python实现将一个数组逆序输出的方法
2018/06/25 Python
Python自定义装饰器原理与用法实例分析
2018/07/16 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
Python模拟登录requests.Session应用详解
2020/11/17 Python
Django视图类型总结
2021/02/17 Python
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
计算机专业毕业生自荐信
2013/12/31 职场文书
预备党员学习十八届三中全会精神思想汇报
2014/09/13 职场文书
2014年群众路线教育实践活动整改措施
2014/09/24 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书
Matlab如何实现矩阵复制扩充
2021/06/02 Python