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正则表达式匹配HTML页面编码
Apr 08 Python
Python实现新浪博客备份的方法
Apr 27 Python
Python基础教程之浅拷贝和深拷贝实例详解
Jul 15 Python
Python基于matplotlib绘制栈式直方图的方法示例
Aug 09 Python
python实现机器人行走效果
Jan 29 Python
Python测试人员需要掌握的知识
Feb 08 Python
Python工厂函数用法实例分析
May 14 Python
对Python _取log的几种方式小结
Jul 25 Python
Pytorch卷积层手动初始化权值的实例
Aug 17 Python
关于Flask项目无法使用公网IP访问的解决方式
Nov 19 Python
关于pytorch处理类别不平衡的问题
Dec 31 Python
Django+RestFramework API接口及接口文档并返回json数据操作
Jul 12 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
CI框架常用方法小结
2016/05/17 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
js onkeypress与onkeydown 事件区别详细说明
2012/12/13 Javascript
jquery鼠标滑过提示title具体实现代码
2013/08/06 Javascript
js function定义函数的几种不错方法
2014/02/27 Javascript
javascript实现控制文字大中小显示
2015/04/28 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
一不小心就做错的JS闭包面试题
2015/11/25 Javascript
JS模拟简易滚动条效果代码(附demo源码)
2016/04/05 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
原生JS改变透明度实现轮播效果
2017/03/24 Javascript
JavaScript实现获取远程的html到当前页面中
2017/03/26 Javascript
JS处理一些简单计算题
2018/02/24 Javascript
IE9 elementUI文件上传的问题解决
2018/10/17 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
vue获取data数据改变前后的值方法
2019/11/07 Javascript
解决Layui 表格自适应高度的问题
2019/11/15 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
使用url_helper简化Python中Django框架的url配置教程
2015/05/30 Python
深入浅析Python字符编码
2015/11/12 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
基于python实现对文件进行切分行
2020/04/26 Python
python3.7调试的实例方法
2020/07/21 Python
详解Python中openpyxl模块基本用法
2021/02/23 Python
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
教师职称自我鉴定
2014/02/12 职场文书
四年大学自我鉴定
2014/02/17 职场文书
电子商务专业应届生求职信
2014/05/28 职场文书
自我查摆剖析材料
2014/10/11 职场文书
刑事申诉状范文
2015/05/20 职场文书
雷锋电影观后感
2015/06/10 职场文书
新人入职感言
2015/07/31 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python