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 相关文章推荐
Linux下将Python的Django项目部署到Apache服务器
Dec 24 Python
分享python数据统计的一些小技巧
Jul 21 Python
Python实现自动添加脚本头信息的示例代码
Sep 02 Python
Python读取指定目录下指定后缀文件并保存为docx
Apr 23 Python
使用python3构建文件传输的方法
Feb 13 Python
python实现AES加密和解密
Mar 27 Python
python中aioysql(异步操作MySQL)的方法
Apr 11 Python
python调用动态链接库的基本过程详解
Jun 19 Python
在linux系统下安装python librtmp包的实现方法
Jul 22 Python
Python获取时间戳代码实例
Sep 24 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
Dec 10 Python
Python使用requests模块爬取百度翻译
Aug 25 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
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
php通过ajax实现双击table修改内容
2014/04/28 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
PHP递归删除多维数组中的某个值
2017/04/17 PHP
php实现的mongoDB单例模式操作类
2018/01/20 PHP
PHP的mysqli_ssl_set()函数讲解
2019/01/23 PHP
laravel5.2表单验证,并显示错误信息的实例
2019/09/29 PHP
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
JavaScript获取当前cpu使用率的方法
2015/12/15 Javascript
JavaScript继承模式粗探
2016/01/12 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
2016/02/17 Javascript
javascript如何实现360度全景照片问题汇总
2016/04/04 Javascript
详解如何在微信小程序中愉快地使用sass
2018/07/30 Javascript
vue利用v-for嵌套输出多层对象,分别输出到个表的方法
2018/09/07 Javascript
React父子组件间的传值的方法
2018/11/13 Javascript
layui点击弹框页面 表单请求的方法
2019/09/21 Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
2020/01/16 Javascript
[31:29]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第一场 12.20
2020/12/23 DOTA
python三元运算符实现方法
2013/12/17 Python
python3序列化与反序列化用法实例
2015/05/26 Python
Python获取当前页面内所有链接的四种方法对比分析
2017/08/19 Python
Python tkinter事件高级用法实例
2018/01/31 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
python pandas 时间日期的处理实现
2019/07/30 Python
解决Python3.8运行tornado项目报NotImplementedError错误
2020/09/02 Python
经典c++面试题四
2015/05/14 面试题
好的自荐信包括什么内容
2013/11/07 职场文书
致铅球运动员广播稿精选
2014/01/12 职场文书
优秀少先队大队辅导员事迹材料
2014/05/04 职场文书
公司离职证明标准范本
2014/10/05 职场文书
单位婚育证明范本
2014/11/21 职场文书
本科毕业答辩开场白
2015/05/27 职场文书
小学数学继续教育研修日志
2015/11/13 职场文书
酒吧七夕情人节宣传语
2015/11/24 职场文书
导游词之河北野三坡
2019/12/11 职场文书
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers