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 25 Python
python实现单向链表详解
Feb 08 Python
python3解析库lxml的安装与基本使用
Jun 27 Python
Python设计模式之职责链模式原理与用法实例分析
Jan 11 Python
基于python的ini配置文件操作工具类
Apr 24 Python
解决yum对python依赖版本问题
Jul 05 Python
Python高级特性——详解多维数组切片(Slice)
Nov 26 Python
python支持多线程的爬虫实例
Dec 21 Python
python在不同条件下的输入与输出
Feb 13 Python
将数据集制作成VOC数据集格式的实例
Feb 17 Python
python 爬取百度文库并下载(免费文章限定)
Dec 04 Python
Python利器openpyxl之操作excel表格
Apr 17 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显示Facebook的粉丝数量方法
2014/01/08 PHP
php网页病毒清除类
2014/12/08 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
Jquery实现自定义窗口随意的拖拽
2014/03/12 Javascript
js实现可得到不同颜色值的颜色选择器实例
2015/02/28 Javascript
js表单中选择框值的获取及表单的序列化
2015/12/17 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
2016/07/04 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
使用JavaScript为一张图片设置备选路径的方法
2017/01/04 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
2017/03/08 Javascript
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
Echarts实现单条折线可拖拽效果
2019/12/19 Javascript
微信小程序实现购物车功能
2020/11/18 Javascript
js实现滚动条自动滚动
2020/12/13 Javascript
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
Python常用内置模块之xml模块(详解)
2017/05/23 Python
Python+Turtle动态绘制一棵树实例分享
2018/01/16 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
2019/03/18 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
2020/03/23 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
2020/06/03 Python
Python爬虫爬取糗事百科段子实例分享
2020/07/31 Python
Css3实现无缝滚动防抖
2020/09/14 HTML / CSS
家得宝加拿大家装网上商店:The Home Depot加拿大
2016/08/27 全球购物
白兰氏健康Mall:BRAND’S
2017/11/13 全球购物
UNIX操作系统结构由哪几部分组成
2016/02/17 面试题
入党自我鉴定范文
2013/10/04 职场文书
网络编辑岗位职责范本
2014/02/10 职场文书
《湘夫人》教学反思
2014/02/21 职场文书
三方协议书范本
2014/04/22 职场文书
副科竞争上岗演讲稿
2014/05/12 职场文书
经济纠纷起诉状
2015/05/20 职场文书
地道战观后感300字
2015/06/04 职场文书
放飞理想主题班会
2015/08/14 职场文书