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写的图片蜘蛛人代码
Aug 27 Python
Python中的exec、eval使用实例
Sep 23 Python
使用Python发送邮件附件以定时备份MySQL的教程
Apr 25 Python
简单介绍Python2.x版本中的cmp()方法的使用
May 20 Python
用python写的一个wordpress的采集程序
Feb 27 Python
Python常用内置模块之xml模块(详解)
May 23 Python
Python 中包/模块的 `import` 操作代码
Apr 22 Python
python中selenium操作下拉滚动条的几种方法汇总
Jul 14 Python
pygame实现俄罗斯方块游戏(对战篇1)
Oct 29 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
Feb 12 Python
Python打印特殊符号及对应编码解析
May 07 Python
pycharm 2018 激活码及破解补丁激活方式
Sep 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
php 大数据量及海量数据处理算法总结
2011/05/07 PHP
基于php缓存的详解
2013/05/15 PHP
ThinkPHP页面跳转success与error方法概述
2014/06/25 PHP
写js时遇到的一些小问题
2010/12/06 Javascript
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
讲解JavaScript中for...in语句的使用方法
2015/06/03 Javascript
实例详解jQuery结合GridView控件的使用方法
2016/01/04 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
js正则表达式惰性匹配和贪婪匹配用法分析
2016/12/26 Javascript
js实现简单的二级联动效果
2017/03/09 Javascript
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
详解vue-cli快速构建vue应用并实现webpack打包
2017/12/13 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
2019/01/18 jQuery
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
基于JavaScript 实现拖放功能
2019/09/12 Javascript
15个简单的JS编码标准让你的代码更整洁(小结)
2020/07/16 Javascript
[47:52]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第二场 11.26
2020/11/30 DOTA
python实现带验证码网站的自动登陆实现代码
2015/01/12 Python
python实现根据主机名字获得所有ip地址的方法
2015/06/28 Python
Python之Scrapy爬虫框架安装及简单使用详解
2017/12/22 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
python 魔法函数实例及解析
2019/09/25 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
Python+OpenCV实现将图像转换为二进制格式
2020/01/09 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
加拿大购物频道:The Shopping Channel
2016/07/21 全球购物
大女孩胸罩:Big Girls Bras
2016/12/15 全球购物
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
副董事长岗位职责
2014/04/02 职场文书
电子专业求职信
2014/06/19 职场文书
学校消防安全责任书
2014/07/23 职场文书
群众路线四风自我剖析材料
2014/10/08 职场文书
党的群众路线教育实践活动批评与自我批评范文
2014/10/16 职场文书
创业计划书之校园超市
2019/09/12 职场文书
星际争霸:毕姥爷vs解冻03
2022/04/01 星际争霸