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中类的一些方法分析
Sep 25 Python
跟老齐学Python之Python文档
Oct 10 Python
python获取android设备的GPS信息脚本分享
Mar 06 Python
深入解析Python的Tornado框架中内置的模板引擎
Jul 11 Python
python中OrderedDict的使用方法详解
May 05 Python
Python3解决棋盘覆盖问题的方法示例
Dec 07 Python
Python中staticmethod和classmethod的作用与区别
Oct 11 Python
Python的条件表达式和lambda表达式实例
Jan 31 Python
使用python的pexpect模块,实现远程免密登录的示例
Feb 14 Python
Django错误:TypeError at / 'bool' object is not callable解决
Aug 16 Python
Django实现从数据库中获取到的数据转换为dict
Mar 27 Python
利用python实现汉诺塔游戏
Mar 01 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
一个阿拉伯数字转中文数字的函数
2006/10/09 PHP
PHP跳转页面的几种实现方法详解
2013/06/08 PHP
php导出CSV抽象类实例
2014/09/24 PHP
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
php、java、android、ios通用的3des方法(推荐)
2016/09/09 PHP
PHP ElasticSearch做搜索实例讲解
2020/02/05 PHP
不要小看注释掉的JS 引起的安全问题
2008/12/27 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
jquery插件jTimer(jquery定时器)使用方法
2013/12/23 Javascript
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
2014/06/26 Javascript
angularJS中$apply()方法详解
2015/01/07 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
js简单实现Select互换数据的方法
2015/08/17 Javascript
JS实现的验证身份证及获取地区功能示例
2017/01/16 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
2019/01/24 Javascript
如何使用pm2快速将项目部署到远程服务器
2019/03/12 Javascript
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
Python 实现淘宝秒杀的示例代码
2018/01/02 Python
彻底搞懂Python字符编码
2018/01/23 Python
在Python中增加和插入元素的示例
2018/11/01 Python
python读取word文档,插入mysql数据库的示例代码
2018/11/07 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
numpy按列连接两个维数不同的数组方式
2019/12/06 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
Python OrderedDict字典排序方法详解
2020/05/21 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
大学本科毕业生求职简历的自我评价
2013/10/09 职场文书
法律六进活动方案
2014/03/13 职场文书
初中学校军训方案
2014/05/09 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
公司员工离职证明书
2014/10/04 职场文书
中秋节英文祝福语句(14句)
2019/09/11 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP
Python基础数据类型tuple元组的概念与用法
2021/08/02 Python
Spring 使用注解开发
2022/05/20 Java/Android