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文件读取的3种方法及路径转义
Jun 21 Python
python 寻找优化使成本函数最小的最优解的方法
Dec 28 Python
PyQt5打开文件对话框QFileDialog实例代码
Feb 07 Python
python实现pdf转换成word/txt纯文本文件
Jun 07 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
Sep 24 Python
python实现可下载音乐的音乐播放器
Feb 25 Python
django项目中新增app的2种实现方法
Apr 01 Python
opencv 图像轮廓的实现示例
Jul 08 Python
Pytest如何使用skip跳过执行测试
Aug 13 Python
Python getsizeof()和getsize()区分详解
Nov 20 Python
Python+腾讯云服务器实现每日自动健康打卡
Dec 06 Python
python通过新建环境安装tfx的问题
May 20 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变量引用的面试题
2010/08/08 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
2017/02/03 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
javascript-TreeView父子联动效果保持节点状态一致
2007/08/12 Javascript
javascript 类方法定义还是有点区别
2009/04/15 Javascript
JavaScript中读取和保存文件实例
2014/05/08 Javascript
jQuery页面加载初始化常用的三种方法
2014/06/04 Javascript
jquery实现LED广告牌旋转系统图片切换效果代码分享
2015/08/26 Javascript
多种JQuery循环滚动文字图片效果代码
2020/06/23 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
前端编码规范(3)JavaScript 开发规范
2017/01/21 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
详解小程序rich-text对富文本支持方案
2018/11/28 Javascript
express.js中间件说明详解
2019/03/19 Javascript
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
Python中变量交换的例子
2014/08/25 Python
在Python中操作日期和时间之gmtime()方法的使用
2015/05/22 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
局域网内python socket实现windows与linux间的消息传送
2019/04/19 Python
python实现海螺图片的方法示例
2019/05/12 Python
Python判断三段线能否构成三角形的代码
2020/04/12 Python
Pandas实现一列数据分隔为两列
2020/05/18 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
Python Merge函数原理及用法解析
2020/09/16 Python
10种CSS3实现的loading动画,挑一个走吧?
2020/11/16 HTML / CSS
第一批党的群众路线教育实践活动工作总结
2014/03/03 职场文书
会议主持词
2014/03/17 职场文书
离婚协议书该怎么写
2014/10/04 职场文书
银行贷款收入证明
2014/10/17 职场文书
2015年卫生监督工作总结
2015/05/21 职场文书
浅谈vue2的$refs在vue3组合式API中的替代方法
2021/04/18 Vue.js
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python
Python序列化与反序列化相关知识总结
2021/06/08 Python