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使用正则表达式检测密码强度源码分享
Jun 11 Python
在Python中使用正则表达式的方法
Aug 13 Python
Python+selenium实现截图图片并保存截取的图片
Jan 05 Python
基于python批量处理dat文件及科学计算方法详解
May 08 Python
使用Python读取二进制文件的实例讲解
Jul 09 Python
解决Pandas的DataFrame输出截断和省略的问题
Feb 08 Python
Python使用统计函数绘制简单图形实例代码
May 15 Python
python字符串中匹配数字的正则表达式
Jul 03 Python
numpy求平均值的维度设定的例子
Aug 24 Python
PyTorch-GPU加速实例
Jun 23 Python
基于python实现生成指定大小txt文档
Jul 20 Python
使用jupyter notebook运行python和R的步骤
Aug 13 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单例模式实现(对象只被创建一次)
2012/12/05 PHP
PHP操作Redis数据库常用方法示例
2018/08/25 PHP
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
js特殊字符转义介绍
2013/11/05 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
jQuery实现邮箱下拉列表自动补全功能
2016/09/08 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
2016/10/10 Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
2018/08/08 jQuery
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
vue实现form表单与table表格的数据关联功能示例
2019/01/29 Javascript
javascript中正则表达式语法详解
2020/08/07 Javascript
跟老齐学Python之集合(set)
2014/09/24 Python
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
Python排序搜索基本算法之冒泡排序实例分析
2017/12/09 Python
使用python 和 lint 删除项目无用资源的方法
2017/12/20 Python
python微信公众号之关键词自动回复
2018/06/15 Python
浅谈Python 多进程默认不能共享全局变量的问题
2019/01/11 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
Django后台管理系统的图文使用教学
2020/01/20 Python
tensorflow 查看梯度方式
2020/02/04 Python
python3+opencv生成不规则黑白mask实例
2020/02/19 Python
Django如何实现密码错误报错提醒
2020/09/04 Python
Zooplus罗马尼亚:宠物食品和配件
2019/11/02 全球购物
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
写出一个方法实现冒泡排序
2016/07/08 面试题
广告设计专业自荐信范文
2013/11/14 职场文书
公司前台接待岗位职责
2013/12/03 职场文书
材料采购员岗位职责
2013/12/17 职场文书
护士求职自荐信范文
2014/03/19 职场文书
汽车促销活动方案
2014/03/31 职场文书
政府采购方案
2014/06/12 职场文书
撤诉书怎么写
2015/05/19 职场文书
2015年工会工作总结范文
2015/07/23 职场文书
python 如何做一个识别率百分百的OCR
2021/05/29 Python