这个问题的动机是 an answer到 question on improving performance在 pandas
中与 DatetimeIndex
进行比较时。
该解决方案通过 df.index.values
将 DatetimeIndex
转换为 numpy
数组,并将该数组与 np. datetime64
对象。这似乎是从此比较中检索 bool 数组的最有效方法。
pandas
的一位开发人员对这个问题的反馈是:“这些通常不一样。提供 numpy 解决方案通常是一种特殊情况,不推荐使用。”
我的问题是:
- 对于一部分操作,它们是否可以互换?我很感激
DatetimeIndex
提供了更多功能,但我只需要基本功能,例如切片和索引。 - 对于可转换为
numpy
的操作,结果 是否有任何记录在案的差异?
在我的研究中,我发现一些帖子提到“并不总是兼容”——但它们似乎都没有任何决定性的引用资料/文档,或具体说明为什么/何时通常它们不兼容。许多其他帖子使用 numpy
表示而不加评论。
最佳答案
在我看来,您应该始终更喜欢使用 Timestamp
- 它可以在需要的情况下轻松转换回 numpy 日期时间。
numpy.datetime64
本质上是 int64
的精简包装器。它几乎没有特定于日期/时间的功能。
pd.Timestamp
是 numpy.datetime64
的包装器。它由相同的 int64 值支持,但支持整个 datetime.datetime
接口(interface),以及有用的 pandas 特定功能。
这两个的数组内表示是相同的——它是一个连续的 int64 数组。 pd.Timestamp
是一个标量框,可以更轻松地处理各个值。
回到链接的答案,你可以这样写,它更短但恰好更快。
%timeit (df.index.values >= pd.Timestamp('2011-01-02').to_datetime64()) & \
(df.index.values < pd.Timestamp('2011-01-03').to_datetime64())
192 µs ± 6.78 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
关于python - pd.Timestamp 与 np.datetime64 : are they interchangeable for selected uses?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49757871/