python数据分析之:时间序列一
在处理很多数据的时候,我们都要用到时间的概念。比如时间戳,固定时期或者时间间隔。pandas提供了一组标准的时间序列处理工具和数据算法。
在python中datetime.datetime模块是用的最多的模块。比如使用datetime.datetime.now()就得到了当前的时间2018-04-14 14:12:31.888964。这个时间包含了年,月,日,小时,分钟,秒,毫秒。
通过datetime模块还可以得到两个时间的时间差
t1=datetime(2018,4,11)
t2=datetime(2018,3,3)
print(t1-t2)
39 days, 0:00:00
也可以通过timedelta进行日期的运算
t1=datetime(2018,4,11)
delta=timedelta(12)
print(t1+delta)
结果:
2018-04-23 00:00:00
但是实际在代码开发过程中,我们经常会遇到用字符串来表示时间,如何转换成datetime模块呢。这里需要用打算哦strptime函数。
value='2018-4-12'
datetime.strptime(value,'%Y-%m-%d')
但是每次都需要用strptime来转换时间太过于麻烦。而且很多时候有不同的时间表达式。比如‘Apri 12,2018’这种格式就无法通过strptime来转换。这里及需要用到dateutil中的parser方法
from dateutil.parser import parse
parse('April 12,2018 12:00 PM')
运行结果:
2018-04-12 12:00:00
还有下面的这种格式,如果设置dayfirst为True.那么表示第一个表示日,而不是月
parse('12/4/2018',dayfirst=True)
2018-04-12 00:00:00
如果不设置,则表示第一个参数为月,
parse('12/4/2018')
2018-12-04 00:00:00
下面介绍pandas中如何处理日期
datestr=['4/12/2018','3/12/2018']
pd.to_datetime(datestr)
运行结果,得到的是一个datetime对象。
DatetimeIndex(['2018-04-12', '2018-03-12'], dtype='datetime64[ns]', freq=None)
时间序列:
pandas最基本的时间序列类型就是时间戳为索引的series
datestr=[datetime(2018,4,12),datetime(2018,4,11),datetime(2018,4,10),datetime(2018,4,9)]
ts=Series(np.random.randn(4),index=datestr)
2018-04-12 0.282997
2018-04-11 0.775905
2018-04-10 -1.039524
2018-04-09 1.946392
dtype: float64
索引,选取,子集
既然通过时间形成了时间序列。那么也可以通过时间索引来的到对应的值。
stamp=ts.index[2]
ts[stamp]
对于时间较长的序列,比如持续100天或者跨度年,月。那么index就可以通过pd.date_range的方法设置起始时间以及时间跨度。在这里periods这里就表示的是持续时间。
ts=Series(np.random.randn(100),index=pd.date_range('4/12/2018',periods=100))
得到从4月12号往后一白天的时间。
2018-04-12 -0.148937
2018-04-13 0.937058
2018-04-14 -2.096196
2018-04-15 0.916470
2018-04-16 -0.697598
2018-04-17 0.643925
2018-04-18 -0.307314
2018-04-19 -0.141321
2018-04-20 -0.175498
2018-04-21 -0.829793
2018-04-22 -0.024155
2018-04-23 -1.051386
2018-04-24 0.540014
2018-04-25 0.154808
2018-04-26 1.358971
2018-04-27 0.525493
2018-04-28 -0.669124
2018-04-29 -0.207421
2018-04-30 -0.228202
2018-05-01 0.816570
2018-05-02 -0.877241
2018-05-03 0.772659
2018-05-04 0.554481
2018-05-05 -0.714872
2018-05-06 1.773668
2018-05-07 0.326872
2018-05-08 -1.079632
2018-05-09 1.024192
2018-05-10 -0.646678
2018-05-11 -1.515030
...
2018-06-21 -0.053543
2018-06-22 2.118719
2018-06-23 0.106124
2018-06-24 0.659720
2018-06-25 -0.991692
2018-06-26 -0.556483
2018-06-27 -0.819689
2018-06-28 0.031711
2018-06-29 0.543342
2018-06-30 0.009368
2018-07-01 1.141678
2018-07-02 0.222943
2018-07-03 0.303460
2018-07-04 -0.815658
2018-07-05 1.291347
2018-07-06 -0.681728
2018-07-07 -0.327148
2018-07-08 1.385592
2018-07-09 1.302346
2018-07-10 1.179094
2018-07-11 -0.465722
2018-07-12 -0.351399
2018-07-13 0.059268
2018-07-14 -0.235086
2018-07-15 0.983399
2018-07-16 -1.767474
2018-07-17 0.596053
2018-07-18 -2.022643
2018-07-19 0.539513
2018-07-20 0.421791
Freq: D, Length: 100, dtype: float64
在上面生成的这个序列中,可以通过设置索引的到某一年或者某一月的数据。ts['2018-4']就可以得到4月份的数据。格式也可以是ts['2018/4']
通过下面的方式得到一段时间内的数据
ts['2018/4/12':'2018/4/23']
运行结果:
2018-04-12 -1.080229
2018-04-13 1.231485
2018-04-14 0.725456
2018-04-15 0.029311
2018-04-16 0.331900
2018-04-17 0.921682
2018-04-18 -0.822750
2018-04-19 -0.569305
2018-04-20 0.589461
2018-04-21 1.405626
2018-04-22 -0.049872
2018-04-23 -0.144766
Freq: D, dtype: float64
还可以通过truncate的方式得到某段时间前或者后的数据
ts.truncate(after='2018/4/15') #得到2018/4/15之前的数据
ts.truncate(before='2018/4/15') #得到2018/4/15之后的数据
前面设置的时间序列的间隔是天级的。如要设置间隔是月度或者是年度的间隔,就需要设置freq的值,D,M,Y反别代表日为间隔,月为间隔,年为间隔。
pd.date_range('4/12/2018',periods=100,freq='D')
pd.date_range('4/12/2018',periods=100,freq='M')
pd.date_range('4/12/2018',periods=100,freq='Y')
还有其他很多的参数设置。具体的参数设置如下:


带有重复序列的时间序列
在有些应用场景中,可能会存在多个观测数据落在同一个时间点的情况
dup_ts=Series(np.arange(4),index=dates)
2018-04-12 0
2018-04-13 1
2018-04-14 2
2018-04-14 3
dtype: int64
通过is_unique就可以得到是否是重复序列
dup_ts.index.is_unique
日期的范围,频率以及移动
pd.date_range('4/12/2018','5/12/2018')
得到4月12日到5月12日的日期。同样的也可以设置freq来设置间隔
DatetimeIndex(['2018-04-12', '2018-04-13', '2018-04-14', '2018-04-15',
'2018-04-16', '2018-04-17', '2018-04-18', '2018-04-19',
'2018-04-20', '2018-04-21', '2018-04-22', '2018-04-23',
'2018-04-24', '2018-04-25', '2018-04-26', '2018-04-27',
'2018-04-28', '2018-04-29', '2018-04-30', '2018-05-01',
'2018-05-02', '2018-05-03', '2018-05-04', '2018-05-05',
'2018-05-06', '2018-05-07', '2018-05-08', '2018-05-09',
'2018-05-10', '2018-05-11', '2018-05-12'],
dtype='datetime64[ns]', freq='D')
如果想对生成的时间序列进行移位获取。就要用到shift函数
ts=Series(np.random.randn(4),index=pd.date_range('4/12/2018',periods=4,freq='M'))
print(ts)
print(ts.shift(2))
结果如下,时间被移位,对应的数据也移位
2018-04-30 -0.065679
2018-05-31 -0.163013
2018-06-30 0.501377
2018-07-31 0.856595
Freq: M, dtype: float64
2018-04-30 NaN
2018-05-31 NaN
2018-06-30 -0.065679
2018-07-31 -0.163013
Freq: M, dtype: float64
由于单纯的移位操作不会修改索引。所以部分数据会被丢弃。因此,如果频率已知,则可以将其传给shift可以实现时间戳进行位移而不是对数据进行简单位移
ts.shift(2,freq='M')
2018-06-30 -0.235855
2018-07-31 1.189707
2018-08-31 0.005851
2018-09-30 -0.134599
Freq: M, dtype: float64
python数据分析之:时间序列一的更多相关文章
- Python数据分析 之时间序列基础
1. 时间序列基础 import numpy as np import pandas as pd np.random.seed(12345) import matplotlib.pyplot as p ...
- Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识
Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...
- 【读书笔记与思考】《python数据分析与挖掘实战》-张良均
[读书笔记与思考]<python数据分析与挖掘实战>-张良均 最近看一些机器学习相关书籍,主要是为了拓宽视野.在阅读这本书前最吸引我的地方是实战篇,我通读全书后给我印象最深的还是实战篇.基 ...
- Python数据分析库pandas基本操作
Python数据分析库pandas基本操作2017年02月20日 17:09:06 birdlove1987 阅读数:22631 标签: python 数据分析 pandas 更多 个人分类: Pyt ...
- python数据分析系列(1)
目录 python基础 python语言基础 Ipython的一些特性 Python语法基础 Python控制流 lambda表达式 Python的数据结构 元组 列表 字典 集合 列表.集合.字典推 ...
- Python数据分析-Pandas(Series与DataFrame)
Pandas介绍: pandas是一个强大的Python数据分析的工具包,是基于NumPy构建的. Pandas的主要功能: 1)具备对其功能的数据结构DataFrame.Series 2)集成时间序 ...
- 小象学院Python数据分析第二期【升级版】
点击了解更多Python课程>>> 小象学院Python数据分析第二期[升级版] 主讲老师: 梁斌 资深算法工程师 查尔斯特大学(Charles Sturt University)计 ...
- Python数据分析【炼数成金15周完整课程】
点击了解更多Python课程>>> Python数据分析[炼数成金15周完整课程] 课程简介: Python是一种面向对象.直译式计算机程序设计语言.也是一种功能强大而完善的通用型语 ...
- Python数据分析入门与实践 ✌✌
Python数据分析入门与实践 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 这是一个数据驱动的时代,想要从事机器学习.人工智能.数据挖掘等前沿技术,都离不开 ...
- 快速入门 Python 数据分析实用指南
Python 现如今已成为数据分析和数据科学使用上的标准语言和标准平台之一.那么作为一个新手小白,该如何快速入门 Python 数据分析呢? 下面根据数据分析的一般工作流程,梳理了相关知识技能以及学习 ...
随机推荐
- vue笔记二
七.列表渲染 1.示例 <ul id="example-2"> <li v-for="(item, index) in items"> ...
- 扩充STL-编写自己的迭代器
这里的迭代器能够与STL组件共同工作,是对STL的一种扩充. 自定义迭代器必须提供iterator_traits的五种特性,分别是迭代器类型.元素类型.距离类型.指针类型与reference类型. ...
- STL学习笔记(排序算法)
STL提供了好几种算法对区间内的元素排序.出来完全排序外,还支持局部排序. 对所有元素排序 void sort(RandomAccessIterator beg,RandomAccessIterato ...
- Java 过滤所有html标签,复制文件到指定位置
public static String filterHtml(String string) { String str = string.replaceAll("<[a-zA-Z]+[ ...
- SQL优化的一些总结 SQL编写一般要求
SQL编写一般要求---SQL语句尽可能简单---分解联接保证高并发---同数据类型的列值比较---不在索引列做运算---禁止使用SELECT *---避免负向查询和%前缀模糊查询---保持事务(连接 ...
- XCode5无法设置Deployment Target的解决办法
今天使用XCode5创建新项目的时候发现无法修改Deployment Target,只能选择iOS7,谷歌了一下找到了答案,在这里分享给大家:) 这是由于XCode5默认会选择在64位的环境下运行,在 ...
- Android下Fragment使用(全集)
1 http://blog.csdn.net/niu_gao/article/details/7163263 思路清晰,讲解详细,代码偏少,推荐高手阅读 2 http://blog.csdn.net ...
- css 温故而知新 1px的问题
解决方法1: //border @mixin border($pos, $color) { content: ""; position: absolute; transform-o ...
- Data Guard配置
>> from zhuhaiqing.info 确认主库处于归档模式下 SQL>archive log list; Database log mode Archive Mode Au ...
- ws 无法热替换的问题
这个坑自己踩过并且第二次就记录一下,因为一直习惯用ws, 使用热部署的时候发现无法自动同步热更新,找了很多方法,具体解决方式如下: webstorm默认保存在临时文件夹,根据下面路径将默认勾选项去除即 ...