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 时间处理datetime实例
Sep 06 Python
Python socket.error: [Errno 98] Address already in use的原因和解决方法
Aug 25 Python
教大家玩转Python字符串处理的七种技巧
Mar 31 Python
python如何派生内置不可变类型并修改实例化行为
Mar 21 Python
对python多线程与global变量详解
Nov 09 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
python实现将文件夹内的每张图片批量分割成多张
Jul 22 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
Aug 27 Python
python实现LRU热点缓存及原理
Oct 29 Python
Python爬虫解析网页的4种方式实例及原理解析
Dec 30 Python
Python实现数字的格式化输出
Aug 01 Python
Pygame框架实现飞机大战
Aug 07 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
Array of country list in PHP with Zend Framework
2011/10/17 PHP
PHP数组编码gbk与utf8互相转换的两种方法
2016/09/01 PHP
如何通过PHP实现Des加密算法代码实例
2020/05/09 PHP
仿jQuery的siblings效果的js代码
2011/08/09 Javascript
js调用后台servlet方法实例
2013/06/09 Javascript
七个很有意思的PHP函数
2014/05/12 Javascript
JavaScript+CSS无限极分类效果完整实现方法
2015/12/22 Javascript
从零学习node.js之mysql数据库的操作(五)
2017/02/24 Javascript
jQuery响应滚动条事件功能示例
2017/10/14 jQuery
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
p5.js实现简单货车运动动画
2019/10/23 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
利用 Monkey 命令操作屏幕快速滑动
2016/12/07 Python
Python基于回溯法子集树模板解决m着色问题示例
2017/09/07 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
浅析python实现scrapy定时执行爬虫
2018/03/04 Python
python 实现对文件夹内的文件排序编号
2018/04/12 Python
对python 多个分隔符split 的实例详解
2018/12/20 Python
python 实现人和电脑猜拳的示例代码
2020/03/02 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
2020/05/27 Python
python代数式括号有效性检验示例代码
2020/10/04 Python
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
Lyle & Scott苏格兰金鹰官网:英国皇室御用品牌
2018/05/09 全球购物
网站域名和主机:Domain.com
2019/04/01 全球购物
求网格中的黑点分布
2013/11/06 面试题
木工主管岗位职责
2013/12/08 职场文书
写给女生的道歉信
2014/01/08 职场文书
给领导的致歉信范文
2014/01/13 职场文书
合作协议书怎么写
2014/04/18 职场文书
考试作弊检讨书
2014/10/21 职场文书
青年文明号申报材料
2014/12/23 职场文书
Django开发RESTful API实现增删改查(入门级)
2021/05/10 Python
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫
vue使用echarts实现折线图
2022/03/21 Vue.js
Golang数据类型和相互转换
2022/04/12 Golang