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+Django在windows下的开发环境配置图解
Nov 11 Python
Python import自定义模块方法
Feb 12 Python
python optparse模块使用实例
Apr 09 Python
python paramiko模块学习分享
Aug 23 Python
JSONLINT:python的json数据验证库实例解析
Nov 28 Python
python矩阵转换为一维数组的实例
Jun 05 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
Jun 13 Python
对Django url的几种使用方式详解
Aug 06 Python
python列表插入append(), extend(), insert()用法详解
Sep 14 Python
你应该知道的Python3.6、3.7、3.8新特性小结
May 12 Python
Pytest单元测试框架如何实现参数化
Sep 05 Python
Python matplotlib安装以及实现简单曲线的绘制
Apr 26 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
php导出CSV抽象类实例
2014/09/24 PHP
PHP中的替代语法介绍
2015/01/09 PHP
微信自定义菜单的创建/查询/取消php示例代码
2016/08/05 PHP
28个JS验证函数收集
2010/03/02 Javascript
网页前台通过js非法字符过滤代码(骂人的话等等)
2010/05/26 Javascript
基于jquery实现全屏滚动效果
2015/11/26 Javascript
js自定义回调函数
2015/12/13 Javascript
学习JavaScript设计模式之迭代器模式
2016/01/19 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
Bootstrap安装环境配置教程分享
2016/05/27 Javascript
AngularJs $parse、$eval和$observe、$watch详解
2016/09/21 Javascript
JS出现失效的情况总结
2017/01/20 Javascript
微信小程序利用co处理异步流程的方法教程
2017/05/20 Javascript
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
基于Vue框架vux组件库实现上拉刷新功能
2017/11/28 Javascript
jQuery位置选择器用法实例分析
2019/06/28 jQuery
JS对象属性的检测与获取操作实例分析
2020/03/17 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
[02:08]2014DOTA2国际邀请赛 430专访:力争取得小组前二
2014/07/11 DOTA
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
python3操作mysql数据库的方法
2017/06/23 Python
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
numpy linalg模块的具体使用方法
2019/05/26 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
HTML5 Web Database 数据库的SQL语句的使用方法
2012/12/09 HTML / CSS
在canvas上实现元素图片镜像翻转动画效果的方法
2018/03/20 HTML / CSS
世界上最大的在线学习和教学市场:Udemy
2017/11/08 全球购物
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
比较一下entity bean和session bean
2013/12/27 面试题
在校大学生自我评价范文
2014/09/12 职场文书
商务英语专业大学生职业生涯规划书
2014/09/14 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
JS Canvas接口和动画效果大全
2021/04/29 Javascript
MySQL创建定时任务
2022/01/22 MySQL