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实现国外赌场热门游戏Craps(双骰子)
Mar 31 Python
python自动翻译实现方法
May 28 Python
Python中的FTP通信模块ftplib的用法整理
Jul 08 Python
Python+MongoDB自增键值的简单实现
Nov 04 Python
Python爬取附近餐馆信息代码示例
Dec 09 Python
python安装模块如何通过setup.py安装(超简单)
May 05 Python
Python绘制的二项分布概率图示例
Aug 22 Python
Python中GeoJson和bokeh-1的使用讲解
Jan 03 Python
Python lambda表达式filter、map、reduce函数用法解析
Sep 11 Python
python实现提取str字符串/json中多级目录下的某个值
Feb 27 Python
Django-xadmin+rule对象级权限的实现方式
Mar 30 Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 11 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的静态缓存用法分析
2014/11/29 PHP
PHP导出带样式的Excel示例代码
2016/08/28 PHP
stripos函数知识点实例分享
2019/02/11 PHP
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
IE、FF、Chrome浏览器中的JS差异介绍
2013/08/13 Javascript
浅谈node.js中async异步编程
2015/10/22 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
JavaScript实现256色转灰度图
2017/02/22 Javascript
ES6中的rest参数与扩展运算符详解
2017/07/18 Javascript
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
JavaScript JSON数据处理全集(小结)
2019/08/15 Javascript
详解mpvue开发微信小程序基础知识
2019/09/23 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
vue项目中微信登录的实现操作
2020/09/08 Javascript
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
[01:02:06]LGD vs Mineski Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
Python中使用scapy模拟数据包实现arp攻击、dns放大攻击例子
2014/10/23 Python
浅谈Django学习migrate和makemigrations的差别
2018/01/18 Python
TensorFlow高效读取数据的方法示例
2018/02/06 Python
python实现手机通讯录搜索功能
2018/02/22 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
2018/06/26 Python
python pytest进阶之fixture详解
2019/06/27 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
关于Flask项目无法使用公网IP访问的解决方式
2019/11/19 Python
基于Python实现人脸自动戴口罩系统
2020/02/06 Python
Django静态资源部署404问题解决方案
2020/05/11 Python
python变量的作用域是什么
2020/05/26 Python
python程序如何进行保存
2020/07/03 Python
浅谈移动端网页图片预加载方案
2018/11/05 HTML / CSS
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
军用级手机壳,专为冒险而建:Zizo Wireless
2019/08/07 全球购物
党的群众路线教育实践活动个人对照检查材料(企业)
2014/11/05 职场文书
2014年社区个人工作总结
2014/12/02 职场文书
英文邀请函
2015/02/02 职场文书
车队安全员岗位职责
2015/02/15 职场文书
php将xml转化对象的实例详解
2021/11/17 PHP