Python NumPy datetime64类型处理:转换、数组生成与运算详解

陆景行
陆景行
发布时间:2026-10-13| 3人浏览过
原创

本文详解Python NumPy库中datetime64类型的核心用法。涵盖从时间字符串到numpy.datetime64对象的转换,利用array和arange函数创建不同精度的时间数组,以及通过astype方法实现与标准datetime格式的互转。此外,还介绍了timedelta64在时间差计算与时间加减运算中的应用,为数据分析中的时间序列处理提供完整解决方案。

前言

NumPy datetime64类型概述

在Python生态中,处理时间数据有多种方式,包括内置的time、datetime和calendar模块,以及dateutil等第三方扩展库。这些工具足以满足日常的时间处理需求。然而,当使用NumPy进行大规模数据分析时,如何高效地转换和处理时间数据成为了关键问题。

自NumPy 1.7版本起,其核心数组对象ndarray开始支持datetime相关功能。由于Python标准库中已存在名为'datetime'的模块,为了避免命名冲突,NumPy中专门用于表示时间数据的类型被命名为'datetime64'。

时间字符串与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_'>

创建不同精度的datetime64数组

当需要从时间格式字符串数组创建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对象数组。当指定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单位。具体示例如下所示:


# 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']

datetime64与标准datetime格式的转换

若要将numpy.datetime64类型转换为标准的datetime格式,可使用astype()方法改变数据类型。具体操作如下所示:


#numpy.datetime64转化为datetime格式
datetime_df=datetime_nd.astype(datetime.datetime)
print(type(datetime_df))#<class 'datetime.date'>

基于timedelta64的时间运算

另外,NumPy还提供了类似datetime.timedelta的功能,支持对两个时间对象进行运算,并返回以特定时间单位表示的数值。由于NumPy的核心数组对象ndarray不包含物理量系统(physical quantities system),因此引入了timedelta64数据类型以补充datetime64的功能。结合datetime和timedelta,可以实现更简洁的时间计算。具体操作如下所示:


# 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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。