数据类型“datetime64[ns]”和“<M8[ns]”之间的区别?
·
回答问题
我在熊猫中创建了一个时间序列:
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”一书中的示例。
在以下段落中,作者检查了索引类型:
In [353]: ts.index.dtype
Out[353]: dtype('datetime64[ns]')
当我在控制台中执行完全相同的操作时,我得到:
ts.index.dtype
dtype('<M8[ns]')
'datetime64[ns]'和'<M8[ns]'两种类型有什么区别?
为什么我会得到不同的类型?
Answers
datetime64[ns]是通用数据类型,而<M8[ns]是特定数据类型。一般 dtypes 映射到特定的 dtypes,但可能与 NumPy 的一个安装不同。
在字节序为little endian的机器上,np.dtype('datetime64[ns]')和np.dtype('<M8[ns]')没有区别:
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]取决于机器的字节序。
还有许多其他类似的通用 dtype 映射到特定 dtype 的示例:int64映射到<i8或>i8,int映射到int32或int64,具体取决于操作系统的位体系结构和 NumPy 的编译方式。
显然, datetime64 dtype 的 repr 自从这本书被写出来以显示 dtype 的字节顺序以来就发生了变化。
更多推荐

所有评论(0)