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 selenium 三种等待方式详解(必会)
Sep 15 Python
Python有序字典简单实现方法示例
Sep 28 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
Feb 24 Python
Tensorflow 实现修改张量特定元素的值方法
Jul 30 Python
python binascii 进制转换实例
Jun 12 Python
Django REST framework 单元测试实例解析
Nov 07 Python
ubuntu 安装pyqt5和卸载pyQt5的方法
Mar 24 Python
keras处理欠拟合和过拟合的实例讲解
May 25 Python
Python学习之路安装pycharm的教程详解
Jun 17 Python
Python中return函数返回值实例用法
Nov 19 Python
python基于pexpect库自动获取日志信息
Feb 01 Python
Python爬虫制作翻译程序的示例代码
Feb 22 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/11/04 PHP
PHP高手需要要掌握的知识点
2014/08/21 PHP
PHP中mysql_field_type()函数用法
2014/11/24 PHP
PHP替换Word中变量并导出PDF图片的实现方法
2020/11/26 PHP
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
Javascript中string转date示例代码
2013/11/01 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
JavaScript中的关联数组问题
2015/03/04 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
基于javascript实现图片预加载
2016/01/05 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
2016/06/14 Javascript
JS之相等操作符详解
2016/09/13 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
Vue 过滤器filters及基本用法
2017/12/26 Javascript
node下使用UglifyJS压缩合并JS文件的方法
2018/03/07 Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
2018/07/25 Javascript
BootStrap table实现表格行拖拽效果
2018/12/01 Javascript
微信小程序实现录音时的麦克风动画效果实例
2019/05/18 Javascript
Python函数式编程指南(四):生成器详解
2015/06/24 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
Python检测生僻字的实现方法
2016/10/23 Python
python将一个英文语句以单词为单位逆序排放的方法
2018/12/20 Python
python Canny边缘检测算法的实现
2020/04/24 Python
Pycharm调试程序技巧小结
2020/08/08 Python
汽车销售求职自荐信
2013/10/01 职场文书
读书伴我成长演讲稿
2014/05/07 职场文书
党员目标管理责任书
2014/07/25 职场文书
党的群众路线教育实践活动个人整改方案
2014/09/21 职场文书
法律进社区活动总结
2015/05/07 职场文书
团拜会主持词
2015/07/04 职场文书
辩论赛新闻稿
2015/07/17 职场文书
mysql 带多个条件的查询方式
2021/06/05 MySQL
Flask response响应的具体使用
2021/07/15 Python
人民币符号
2022/02/17 杂记