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批量下载图片的三种方法
Apr 22 Python
python使用sorted函数对列表进行排序的方法
Apr 04 Python
Python之ReportLab绘制条形码和二维码的实例
Jan 15 Python
python3实现SMTP发送邮件详细教程
Jun 19 Python
Python 正则表达式匹配字符串中的http链接方法
Dec 25 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
Jun 03 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
Aug 13 Python
安装python及pycharm的教程图解
Oct 10 Python
Python中的延迟绑定原理详解
Oct 11 Python
使用matplotlib绘制图例标签中带有公式的图
Dec 13 Python
python 6种方法实现单例模式
Dec 15 Python
pycharm无法安装cv2模块问题
May 20 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
使用 eAccelerator加速PHP代码的方法
2007/09/30 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
2010/10/25 PHP
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
2012/06/17 PHP
使用php测试硬盘写入速度示例
2014/01/27 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
2019/02/15 PHP
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
2008/12/25 Javascript
提升你网站水平的jQuery插件集合推荐
2011/04/19 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
JavaScript学习笔记之定时器
2015/01/22 Javascript
javascript制作sql转换为stringBuffer的小工具
2015/04/03 Javascript
JavaScript中constructor()方法的使用简介
2015/06/05 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
JavaScript与java语言有什么不同
2016/09/22 Javascript
JavaScript仿网易选项卡制作代码
2016/10/06 Javascript
如何提高数据访问速度
2016/12/26 Javascript
javascript history对象详解
2017/02/09 Javascript
NodeJs搭建本地服务器之使用手机访问的实例讲解
2018/05/12 NodeJs
json数据传到前台并解析展示成列表的方法
2018/08/06 Javascript
vue动画打包后失效问题的解决方法
2018/09/18 Javascript
js实现表格数据搜索
2020/08/09 Javascript
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
详解一种用django_cache实现分布式锁的方式
2019/09/01 Python
使用python批量转换文件编码为UTF-8的实现
2020/04/03 Python
Python 实现键盘鼠标按键模拟
2020/11/18 Python
CSS3动画和HTML5新特性详解
2020/08/31 HTML / CSS
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
小区停车场管理制度
2014/01/27 职场文书
病媒生物防治方案
2014/05/13 职场文书
消防安全承诺书
2014/05/22 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
换届选举主持词
2015/07/03 职场文书
离婚财产分割协议书
2015/08/11 职场文书
宝宝满月宴答谢词
2015/09/30 职场文书