Python Numpy库datetime类型的处理详解


Posted in Python onJuly 13, 2019

前言

关于时间的处理,Python中自带的处理时间的模块就有time 、datetime、calendar,另外还有扩展的第三方库,如dateutil等等。通过这些途径可以随心所欲地用Python去处理时间。当我们用NumPy库做数据分析时,如何转换时间呢?

在NumPy 1.7版本开始,它的核心数组(ndarray)对象支持datetime相关功能,由于'datetime'这个数据类型名称已经在Python自带的datetime模块中使用了, NumPy中时间数据的类型称为'datetime64'。

单个时间格式字符串转换为numpy的datetime对象,可使用datetime64实例化一个对象,如下所示:

#时间字符串转numpy.datetime64
datetime_nd=np.datetime64('2019-01-01')
print(type(datetime_nd))#<class 'numpy.datetime64'>

反过来numpy的datetime对象转换为时间格式字符串,可使用datetime_as_string()函数,如下所示:

#numpy.datetime64转时间字符串
datetime_str=np.datetime_as_string(datetime_nd)
print(type(datetime_str))#<class 'numpy.str_'>

从时间格式字符串数组去创建numpy的datetime对象数组(array)时,可以直接使用numpy.array()函数,指定dtype为'datetime64',这样的话数组中的元素为'datetime64'类型,如下所示:

datetime_array = np.array(['2019-01-05','2019-01-02','2019-01-03'], dtype='datetime64')
print(datetime_array)#['2019-01-05' '2019-01-02' '2019-01-03']
print(type(datetime_array))#<class 'numpy.ndarray'>
print(type(datetime_array[0]))#<class 'numpy.datetime64'>

也可以通过numpy.arange()函数,给定时间起始范围去创建numpy的datetime对象数组(array),指定dtype为'datetime64'时默认以日为时间间隔,如下所示:

datetime_array = np.arange('2019-01-05','2019-01-10', dtype='datetime64')
print(datetime_array)#['2019-01-05' '2019-01-06' '2019-01-07' '2019-01-08' '2019-01-09']

设定numpy.arange()函数中的dtype参数,可以调整时间的间隔,比如以年、月、周,甚至小时、分钟、毫秒程度的间隔生成时间数组,这点和Python的datetime模块是一样的,分为了date单位和time单位。如下所示:

Python Numpy库datetime类型的处理详解

# generate year datetime array
datetime_array = np.arange('2018-01-01','2020-01-01', dtype='datetime64[Y]')
print(datetime_array)#['2018' '2019']
# generate month datetime array
datetime_array = np.arange('2019-01-01','2019-10-01', dtype='datetime64[M]')
print(datetime_array)#['2019-01' '2019-02' '2019-03' '2019-04' '2019-05' '2019-06' '2019-07' '2019-08' '2019-09']
# generate week datetime array
datetime_array = np.arange('2019-01-05','2019-02-10', dtype='datetime64[W]')
print(datetime_array)#['2019-01-03' '2019-01-10' '2019-01-17' '2019-01-24' '2019-01-31']
# generate ms datetime array
datetime_array = np.arange('2019-01-05','2019-01-10', dtype='datetime64[ms]')
print(datetime_array)
#['2019-01-05T00:00:00.000' '2019-01-05T00:00:00.001'
# '2019-01-05T00:00:00.002' ... '2019-01-09T23:59:59.997'
# '2019-01-09T23:59:59.998' '2019-01-09T23:59:59.999']

将numpy.datetime64转化为datetime格式转换为datetime格式,可使用astype()方法转换数据类型,如下所示:

#numpy.datetime64转化为datetime格式
datetime_df=datetime_nd.astype(datetime.datetime)
print(type(datetime_df))#<class 'datetime.date'>

另外,numpy也提供了datetime.timedelta类的功能,支持两个时间对象的运算,得到一个时间单位形式的数值。因为numpy的核心数组(ndarray)对象没有物理量系统(physical quantities system),所以创建了timedelta64数据类型来补充datetime64。datetime和timedelta结合提供了更简单的datetime计算方法。如下所示:

# numpy.datetime64 calculations
datetime_delta = np.datetime64('2009-01-01') - np.datetime64('2008-01-01')
print(datetime_delta)#366 days
print(type(datetime_delta))#<class 'numpy.timedelta64'>
datetime_delta = np.datetime64('2009') + np.timedelta64(20, 'D')
print(datetime_delta)#2009-01-21
datetime_delta = np.datetime64('2011-06-15T00:00') + np.timedelta64(12, 'h')
print(datetime_delta)#2011-06-15T12:00
datetime_delta = np.timedelta64(1,'W') / np.timedelta64(1,'D')
print(datetime_delta)#7.0

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python yield使用方法示例
Dec 04 Python
以一个投票程序的实例来讲解Python的Django框架使用
Feb 18 Python
分享一下如何编写高效且优雅的 Python 代码
Sep 07 Python
Python文件操作之合并文本文件内容示例代码
Sep 19 Python
python 巧用正则寻找字符串中的特定字符的位置方法
May 02 Python
python爬虫 execjs安装配置及使用
Jul 30 Python
Django发送邮件和itsdangerous模块的配合使用解析
Aug 10 Python
Python数据库小程序源代码
Sep 15 Python
python实现12306登录并保存cookie的方法示例
Dec 17 Python
如何表示python中的相对路径
Jul 08 Python
基于python的matplotlib制作双Y轴图
Apr 20 Python
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
Jun 07 Python
Python3内置模块random随机方法小结
Jul 13 #Python
简单了解python的一些位运算技巧
Jul 13 #Python
简单了解python PEP的一些知识
Jul 13 #Python
python爬虫神器Pyppeteer入门及使用
Jul 13 #Python
Python 分享10个PyCharm技巧
Jul 13 #Python
简单了解Python3里的一些新特性
Jul 13 #Python
python将类似json的数据存储到MySQL中的实例
Jul 12 #Python
You might like
深入解析yii权限分级式访问控制的实现(非RBAC法)
2013/06/13 PHP
php中substr()函数参数说明及用法实例
2014/11/15 PHP
php实现批量上传数据到数据库(.csv格式)的案例
2017/06/18 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
短信提示使用 特效
2007/01/19 Javascript
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
juqery 学习之六 CSS--css、位置、宽高
2011/02/11 Javascript
基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
2011/09/02 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
JavaScript中双叹号!!作用示例介绍
2014/09/21 Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
2014/12/12 Javascript
Javascript中的arguments与重载介绍
2015/03/15 Javascript
JQ实现新浪游戏首页幻灯片
2015/07/29 Javascript
学习JavaScript设计模式(多态)
2015/11/25 Javascript
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
javascript中的数据类型检测方法详解
2019/08/07 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
2020/09/11 Javascript
python用于url解码和中文解析的小脚本(python url decoder)
2013/08/11 Python
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
Tensorflow加载预训练模型和保存模型的实例
2018/07/27 Python
python使用socket实现的传输demo示例【基于TCP协议】
2019/09/24 Python
使用python绘制二维图形示例
2019/11/22 Python
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
家得宝加拿大家装网上商店:The Home Depot加拿大
2016/08/27 全球购物
美国男士和女士奢侈品折扣手表购物网站:Certified Watch Store
2018/06/13 全球购物
专科毕业生求职简历的自我评价
2013/10/12 职场文书
七年级政治教学反思
2014/02/03 职场文书
司机职责范本
2014/03/08 职场文书
乡镇交通安全实施方案
2014/03/29 职场文书
竞选团支书演讲稿
2014/04/28 职场文书
祖国在我心中演讲稿600字
2014/09/23 职场文书
团员个人年度总结
2015/02/26 职场文书
田径运动会通讯稿
2015/07/18 职场文书
《老人与海鸥》教学反思
2016/02/16 职场文书
高二英语教学反思
2016/03/03 职场文书