首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >数据类型'datetime64[ns]‘和'<M8[ns]’之间的区别?

数据类型'datetime64[ns]‘和'<M8[ns]’之间的区别?
EN

Stack Overflow用户
提问于 2015-03-23 17:17:10
回答 2查看 107.8K关注 0票数 97

我在pandas中创建了一个TimeSeries:

代码语言:javascript
代码运行次数:0
运行
复制
In [346]: from datetime import datetime

In [347]: dates = [datetime(2011, 1, 2), datetime(2011, 1, 5), datetime(2011, 1, 7),

 .....: datetime(2011, 1, 8), datetime(2011, 1, 10), datetime(2011, 1, 12)]

In [348]: ts = Series(np.random.randn(6), index=dates)

In [349]: ts

Out[349]: 

2011-01-02 0.690002

2011-01-05 1.001543

2011-01-07 -0.503087

2011-01-08 -0.622274

2011-01-10 -0.921169

2011-01-12 -0.726213

我将遵循“Python for Data Analysis”一书中的示例。

在下面的段落中,作者检查了索引类型:

代码语言:javascript
代码运行次数:0
运行
复制
In [353]: ts.index.dtype

Out[353]: dtype('datetime64[ns]')

当我在控制台中执行完全相同的操作时,我会得到:

代码语言:javascript
代码运行次数:0
运行
复制
ts.index.dtype
dtype('<M8[ns]')

'datetime64[ns]''<M8[ns]'这两种类型之间的区别是什么?

为什么我会得到一个不同的类型?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-24 03:25:43

datetime64[ns]是通用数据类型,而<M8[ns]是特定数据类型。一般数据类型映射到特定的数据类型,但不同的NumPy安装可能有所不同。

在字节顺序为小端的计算机上,np.dtype('datetime64[ns]')np.dtype('<M8[ns]')之间没有区别

代码语言:javascript
代码运行次数:0
运行
复制
In [6]: np.dtype('datetime64[ns]') == np.dtype('<M8[ns]')
Out[6]: True

但是,在大端计算机上,np.dtype('datetime64[ns]')等于np.dtype('>M8[ns]')

因此,根据机器的字节顺序,datetime64[ns]映射到<M8[ns]>M8[ns]

还有许多其他类似的通用数据类型映射到特定数据类型的示例:int64映射到<i8>i8int映射到int32int64,这取决于操作系统的位体系结构和NumPy的编译方式。

显然,datetime64数据类型的repr自本书编写以来发生了变化,以显示数据类型的字节顺序。

票数 153
EN

Stack Overflow用户

发布于 2021-04-24 19:20:59

了解一些背景知识将有助于理解输出的细微差别。

Numpy有一个精心设计的数据类型层次结构。类型信息作为属性存储在数据类型对象中,该对象是numpy.dtype类的实例。它描述了如何解释与数组项对应的固定大小的内存块中的字节(字节的顺序、字节的数量等)。

可以通过简单地创建dtype的实例来检查各种属性。

代码语言:javascript
代码运行次数:0
运行
复制
In [1]: import numpy as np

In [2]: dt = np.datetime64('1980', 'ns')

In [3]: dt
Out[3]: numpy.datetime64('1980-01-01T00:00:00.000000000')

In [4]: dt.dtype
Out[4]: dtype('<M8[ns]')

In [5]: dt.dtype.char
Out[5]: 'M'

In [6]: dt.dtype.name
Out[6]: 'datetime64[ns]'

In [7]: dt.dtype.str
Out[7]: '<M8[ns]'

In [8]: dt.dtype.type
Out[8]: numpy.datetime64

reprstr是对象的字符串表示形式,对于相同的基础数据类型,每个都可以有不同的输出。

代码语言:javascript
代码运行次数:0
运行
复制
In [9]: repr(dt.dtype)
Out[9]: "dtype('<M8[ns]')"

In [10]: str(dt.dtype)
Out[10]: 'datetime64[ns]'

应用程序(shell、控制台、调试器等)可以调用它们中的任何一个,因此对于相同的类型,输出可能看起来不同。

尽管这很令人困惑,但在位宽、类型别名等方面仍然存在更多细微差别。有关详细信息,请参阅Data types in Python, Numpy and Pandas

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29206612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档