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 过滤字符串的技巧,map与itertools.imap
Sep 06 Python
python进阶教程之文本文件的读取和写入
Aug 29 Python
详解Django中的过滤器
Jul 16 Python
Anaconda下安装mysql-python的包实例
Jun 11 Python
pandas 使用均值填充缺失值列的小技巧分享
Jul 04 Python
Python  Django 母版和继承解析
Aug 09 Python
python图片二值化提高识别率代码实例
Aug 24 Python
python数据处理之如何选取csv文件中某几行的数据
Sep 02 Python
Python3的unicode编码转换成中文的问题及解决方案
Dec 10 Python
Python partial函数原理及用法解析
Dec 11 Python
python filecmp.dircmp实现递归比对两个目录的方法
May 22 Python
Python3与fastdfs分布式文件系统如何实现交互
Jun 23 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 执行系统命令的方法
2009/07/07 PHP
PHP无刷新上传文件实现代码
2011/09/19 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
PHP应用跨时区功能的实现方法
2019/03/21 PHP
PHP实现随机发放扑克牌
2020/04/21 PHP
js实现运行代码需要刷新的解决方法
2007/08/18 Javascript
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
7款吸引人眼球的jQuery/CSS3特效实例分享
2013/04/25 Javascript
jQuery 借助插件Lavalamp实现导航条动态美化效果
2013/09/27 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
Bootstrap项目实战之子栏目资讯内容
2016/04/25 Javascript
jquery实现网页定位导航
2016/08/23 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
vue项目中跳转到外部链接的实例讲解
2018/09/20 Javascript
Laravel admin实现消息提醒、播放音频功能
2019/07/10 Javascript
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
Python批量重命名同一文件夹下文件的方法
2015/05/25 Python
python通过百度地图API获取某地址的经纬度详解
2018/01/28 Python
Python实现使用卷积提取图片轮廓功能示例
2018/05/12 Python
python 3.3 下载固定链接文件并保存的方法
2018/12/18 Python
python或C++读取指定文件夹下的所有图片
2019/08/31 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
Aurora London官网:奢华、负担得起的皮革手袋
2020/08/01 全球购物
餐饮业经理竞聘演讲稿
2014/01/14 职场文书
家庭教育先进个人事迹材料
2014/01/24 职场文书
爱心捐书活动总结
2014/07/05 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
Mysql效率优化定位较低sql的两种方式
2021/05/26 MySQL
spring boot实现文件上传
2022/08/14 Java/Android