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实现配置文件备份的方法
Jul 30 Python
使用Python编写简单的画图板程序的示例教程
Dec 08 Python
如何将python中的List转化成dictionary
Aug 15 Python
python实现pdf转换成word/txt纯文本文件
Jun 07 Python
将pip源更换到国内镜像的详细步骤
Apr 07 Python
python2和python3在处理字符串上的区别详解
May 29 Python
python输出电脑上所有的串口名的方法
Jul 02 Python
python如何将多个PDF进行合并
Aug 13 Python
Python matplotlib绘制饼状图功能示例
Sep 10 Python
pytorch 指定gpu训练与多gpu并行训练示例
Dec 31 Python
设置jupyter中DataFrame的显示限制方式
Apr 12 Python
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
Aug 14 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 Switch 语句之学习笔记
2013/09/21 PHP
dedecms函数分享之获取某一栏目所有子栏目
2014/05/19 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
javascript fullscreen全屏实现代码
2009/04/09 Javascript
避免回车键导致的页面无意义刷新的解决方法
2011/04/12 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
2014/04/30 Javascript
node.js中的fs.realpath方法使用说明
2014/12/16 Javascript
node.js中的fs.statSync方法使用说明
2014/12/16 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
JavaScript中的substr()方法使用详解
2015/06/06 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
2015/11/25 Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
2016/01/23 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
2017/06/17 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
2019/05/13 Javascript
vue的注意规范之v-if 与 v-for 一起使用教程
2019/08/04 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
2020/08/06 Javascript
Express 配置HTML页面访问的实现
2020/11/01 Javascript
win10下Python3.6安装、配置以及pip安装包教程
2017/10/01 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
2018/01/24 Python
python使用Matplotlib画条形图
2020/03/25 Python
详解python中的数据类型和控制流
2019/08/08 Python
Python有参函数使用代码实例
2020/01/06 Python
在Tensorflow中实现leakyRelu操作详解(高效)
2020/06/30 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
CSS3实现DIV圆角效果完整代码
2012/10/10 HTML / CSS
泰国办公用品购物网站:OfficeMate
2018/02/04 全球购物
毕业生自我鉴定范文
2013/11/08 职场文书
人力资源经理自我评价
2014/01/04 职场文书
个性与发展自我评价
2014/02/11 职场文书
机关单位动员会主持词
2014/03/20 职场文书
新年祝酒词大全
2015/08/11 职场文书
Oracle使用别名的好处
2022/04/19 Oracle