python+pandas+时间、日期以及时间序列处理方法


Posted in Python onJuly 10, 2018

先简单的了解下日期和时间数据类型及工具

python标准库包含于日期(date)和时间(time)数据的数据类型,datetime、time以及calendar模块会被经常用到。

datetime以毫秒形式存储日期和时间,datetime.timedelta表示两个datetime对象之间的时间差。

给datetime对象加上或减去一个或多个timedelta,会产生一个新的对象

from datetime import datetime
from datetime import timedelta
now = datetime.now()
now
datetime.datetime(2017, 6, 27, 15, 56, 56, 167000)
datetime参数:datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
delta = now - datetime(2017,6,27,10,10,10,10)
delta
datetime.timedelta(0, 20806, 166990)
delta.days
 0
delta.seconds
 20806
delta.microseconds
 166990

只有这三个参数了!

datetime模块中的数据类型

类型 说明
date 以公历形式存储日历日期(年、月、日)
time 将时间存储为时、分、秒、毫秒
datetime 存储日期和时间
timedelta 表示两个datetime值之间的差(日、秒、毫秒)

字符串和datetime的相互转换

1)python标准库函数

日期转换成字符串:利用str 或strftime

字符串转换成日期:datetime.strptime

stamp = datetime(2017,6,27)
str(stamp)
 '2017-06-27 00:00:00'
stamp.strftime('%y-%m-%d')#%Y是4位年,%y是2位年
 '17-06-27'
#对多个时间进行解析成字符串
date = ['2017-6-26','2017-6-27']
datetime2 = [datetime.strptime(x,'%Y-%m-%d') for x in date]
datetime2
[datetime.datetime(2017, 6, 26, 0, 0), datetime.datetime(2017, 6, 27, 0, 0)]

2)第三方库dateutil.parser的时间解析函数

from dateutil.parser import parse
parse('2017-6-27')
 datetime.datetime(2017, 6, 27, 0, 0)
parse('27/6/2017',dayfirst =True)
 datetime.datetime(2017, 6, 27, 0, 0)

3)pandas处理成组日期

pandas通常用于处理成组日期,不管这些日期是DataFrame的轴索引还是列,to_datetime方法可以解析多种不同的日期表示形式。

date
 ['2017-6-26', '2017-6-27']
import pandas as pd
pd.to_datetime(date)
 DatetimeIndex(['2017-06-26', '2017-06-27'], dtype='datetime64[ns]', freq=None)

datetime 格式定义

代码 说明
%Y 4位数的年
%y 2位数的年
%m 2位数的月[01,12]
%d 2位数的日[01,31]
%H 时(24小时制)[00,23]
%l 时(12小时制)[01,12]
%M 2位数的分[00,59]
%S 秒[00,61]有闰秒的存在
%w 用整数表示的星期几[0(星期天),6]
%F %Y-%m-%d简写形式例如,2017-06-27
%D %m/%d/%y简写形式

pandas时间序列基础以及时间、日期处理

pandas最基本的时间序列类型就是以时间戳(时间点)(通常以python字符串或datetime对象表示)为索引的Series:

dates = ['2017-06-20','2017-06-21',\
  '2017-06-22','2017-06-23','2017-06-24','2017-06-25','2017-06-26','2017-06-27']
import numpy as np
ts = pd.Series(np.random.randn(8),index = pd.to_datetime(dates))
ts
 2017-06-20 0.788811
 2017-06-21 0.372555
 2017-06-22 0.009967
 2017-06-23 -1.024626
 2017-06-24 0.981214
 2017-06-25 0.314127
 2017-06-26 -0.127258
 2017-06-27 1.919773
 dtype: float64
ts.index
 DatetimeIndex(['2017-06-20', '2017-06-21', '2017-06-22', '2017-06-23',
   '2017-06-24', '2017-06-25', '2017-06-26', '2017-06-27'],
   dtype='datetime64[ns]', freq=None)

pandas不同索引的时间序列之间的算术运算会自动按日期对齐

ts[::2]#从前往后每隔两个取数据
 2017-06-20 0.788811
 2017-06-22 0.009967
 2017-06-24 0.981214
 2017-06-26 -0.127258
 dtype: float64
ts[::-2]#从后往前逆序每隔两个取数据
 2017-06-27 1.919773
 2017-06-25 0.314127
 2017-06-23 -1.024626
 2017-06-21 0.372555
 dtype: float64
ts + ts[::2]#自动数据对齐
 2017-06-20 1.577621
 2017-06-21  NaN
 2017-06-22 0.019935
 2017-06-23  NaN
 2017-06-24 1.962429
 2017-06-25  NaN
 2017-06-26 -0.254516
 2017-06-27  NaN
 dtype: float64

索引为日期的Series和DataFrame数据的索引、选取以及子集构造

方法:

1).index[number_int]

2)[一个可以被解析为日期的字符串]

3)对于,较长的时间序列,只需传入‘年'或‘年月'可返回对应的数据切片

4)通过时间范围进行切片索引

ts
 2017-06-20 0.788811
 2017-06-21 0.372555
 2017-06-22 0.009967
 2017-06-23 -1.024626
 2017-06-24 0.981214
 2017-06-25 0.314127
 2017-06-26 -0.127258
 2017-06-27 1.919773
 dtype: float64


ts[ts.index[2]]
 0.0099673896063391908
ts['2017-06-21']#传入可以被解析成日期的字符串
 0.37255538918121028
ts['21/06/2017']
 0.37255538918121028
ts['20170621']
 0.37255538918121028
ts['2017-06']#传入年或年月
 2017-06-20 0.788811
 2017-06-21 0.372555
 2017-06-22 0.009967
 2017-06-23 -1.024626
 2017-06-24 0.981214
 2017-06-25 0.314127
 2017-06-26 -0.127258
 2017-06-27 1.919773
 dtype: float64


ts['2017-06-20':'2017-06-23']#时间范围进行切片
 2017-06-20 0.788811
 2017-06-21 0.372555
 2017-06-22 0.009967
 2017-06-23 -1.024626
 dtype: float64

带有重复索引的时间序列

1).index.is_unique检查索引日期是否是唯一的

2)对非唯一时间戳的数据进行聚合,通过groupby,并传入level = 0(索引的唯一一层)

dates = pd.DatetimeIndex(['2017/06/01','2017/06/02','2017/06/02','2017/06/02','2017/06/03'])
dates
 DatetimeIndex(['2017-06-01', '2017-06-02', '2017-06-02', '2017-06-02',
   '2017-06-03'],
   dtype='datetime64[ns]', freq=None)

dup_ts = pd.Series(np.arange(5),index = dates)
dup_ts
 2017-06-01 0
 2017-06-02 1
 2017-06-02 2
 2017-06-02 3
 2017-06-03 4
 dtype: int32

dup_ts.index.is_unique
 False
dup_ts['2017-06-02']
 2017-06-02 1
 2017-06-02 2
 2017-06-02 3
 dtype: int32

grouped = dup_ts.groupby(level=0).mean()
grouped
 2017-06-01 0
 2017-06-02 2
 2017-06-03 4
 dtype: int32

dup_df = pd.DataFrame(np.arange(10).reshape((5,2)),index = dates )
dup_df

0 1
2017-06-01 0 1
2017-06-02 2 3
2017-06-02 4 5
2017-06-02 6 7
2017-06-03 8 9
grouped_df = dup_df.groupby(level=0).mean()##针对DataFrame
grouped_df

0 1
2017-06-01 0 1
2017-06-02 4 5
2017-06-03 8 9

总结

该篇博客主要内容:

1)字符串、日期的转换方法

2)日期和时间的主要python,datetime、timedelta、pandas.to_datetime等

3)以时间为索引的Series和DataFrame的索引、切片

4)带有重复时间索引时的索引,.groupby(level=0)应用

以上这篇python+pandas+时间、日期以及时间序列处理方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中二维列表如何获取子区域元素的组成
Jan 19 Python
Python基于mysql实现学生管理系统
Feb 21 Python
python面向对象法实现图书管理系统
Apr 19 Python
Python API自动化框架总结
Nov 12 Python
python selenium 执行完毕关闭chromedriver进程示例
Nov 15 Python
Python SSL证书验证问题解决方案
Jan 13 Python
python实现滑雪游戏
Feb 22 Python
python实现UDP协议下的文件传输
Mar 20 Python
Matplotlib 绘制饼图解决文字重叠的方法
Jul 24 Python
Python 实现一个计时器
Jul 28 Python
Python数据模型与Python对象模型的相关总结
Jan 26 Python
Pandas数据类型之category的用法
Jun 28 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
Jul 10 #Python
Python Dataframe 指定多列去重、求差集的方法
Jul 10 #Python
Python实现对文件进行单词划分并去重排序操作示例
Jul 10 #Python
python3中函数参数的四种简单用法
Jul 09 #Python
python3学习之Splash的安装与实例教程
Jul 09 #Python
Python基于sklearn库的分类算法简单应用示例
Jul 09 #Python
Python不使用int()函数把字符串转换为数字的方法
Jul 09 #Python
You might like
Fine Uploader文件上传组件应用介绍
2013/01/06 PHP
PHP使用xmllint命令处理xml与html的方法
2014/12/15 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
2018/09/07 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
JavaScript this 深入理解
2009/07/30 Javascript
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
2011/09/17 Javascript
浅谈Javascript数组索引
2015/07/29 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
JS验证图片格式和大小并预览的简单实例
2016/10/11 Javascript
vue登录路由验证的实现
2017/12/13 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
JS实现获取自定义属性data值的方法示例
2018/12/19 Javascript
微信小程序动态显示项目倒计时
2019/06/20 Javascript
Vue中fragment.js使用方法小结
2020/02/17 Javascript
python 文本单词提取和词频统计的实例
2018/12/22 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
澳大利亚领先的在线美容商店:Facial Co
2017/10/22 全球购物
英国山地公路自行车商店:Tweeks Cycles
2018/03/16 全球购物
卡西欧B级产品官方网站:Casio Outlet
2018/05/22 全球购物
初中三好学生事迹材料
2014/01/13 职场文书
打架检讨书100字
2014/01/19 职场文书
活动总结书
2014/05/08 职场文书
机械专业技术员求职信
2014/06/14 职场文书
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
2014党的群众路线教育实践活动总结材料
2014/10/31 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
大学生敬老院活动总结
2015/05/07 职场文书
学会感恩主题班会
2015/08/12 职场文书
个人售房合同协议书
2016/03/21 职场文书
详解Python魔法方法之描述符类
2021/05/26 Python
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript
聊聊Python String型列表求最值的问题
2022/01/18 Python