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实现带验证码网站的自动登陆实现代码
Jan 12 Python
Python中使用Boolean操作符做真值测试实例
Jan 30 Python
python字典get()方法用法分析
Apr 17 Python
python利用拉链法实现字典方法示例
Mar 25 Python
flask框架实现连接sqlite3数据库的方法分析
Jul 16 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
Python单元测试unittest的具体使用示例
Dec 17 Python
Python实现二叉搜索树BST的方法示例
Jul 30 Python
python中类的输出或类的实例输出为这种形式的原因
Aug 12 Python
Django项目中实现使用qq第三方登录功能
Aug 13 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
Apr 08 Python
Python常用数字处理基本操作汇总
Sep 10 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获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
PHP生成自适应大小的缩略图类及使用方法分享
2014/05/06 PHP
ThinkPHP使用Smarty第三方插件方法小结
2016/03/19 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
2016/04/07 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
js 纯数字不重复排列的另类方法
2010/07/17 Javascript
Jquery插件之多图片异步上传
2010/10/20 Javascript
JavaScript OOP面向对象介绍
2010/12/02 Javascript
javascript表单验证 - Parsley.js使用和配置
2013/01/25 Javascript
JavaScript实现的一个计算数字步数的算法分享
2014/12/06 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
2015/06/19 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
2018/04/26 Javascript
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
2018/09/01 Javascript
详解Vue 动态组件与全局事件绑定总结
2018/11/11 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
[01:18:31]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第一场 1月10日
2021/03/11 DOTA
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
Windows下Python使用Pandas模块操作Excel文件的教程
2016/05/31 Python
python中requests小技巧
2017/05/10 Python
python 统计数组中元素出现次数并进行排序的实例
2018/07/02 Python
python list转矩阵的实例讲解
2018/08/04 Python
解决python3中cv2读取中文路径的问题
2018/12/05 Python
python如何制作英文字典
2019/06/25 Python
Python list与NumPy array 区分详解
2019/11/06 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
Python 必须了解的5种高级特征
2020/09/10 Python
什么是抽象
2015/12/13 面试题
大学生职业生涯规划书范文
2014/01/14 职场文书
《再见了,亲人》教学反思
2014/02/26 职场文书
建筑设计专业求职自我评价
2014/03/02 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
幼儿园小班教师个人工作总结
2015/02/06 职场文书
党风廉洁教育心得体会
2016/01/20 职场文书
Pandas 数据编码的十种方法
2022/04/20 Python