pd.Timestamp与np.datetime64:它们是否可以在选定的用途中互换?

时间:2018-04-10 15:44:39

标签: python arrays pandas numpy datetime

DatetimeIndexpandas进行比较时,an answerquestion on improving performance的动机是这个问题。

解决方案通过DatetimeIndexnumpy转换为df.index.values数组,并将数组与np.datetime64对象进行比较。这似乎是从此比较中检索布尔数组的最有效方法。

pandas的一位开发人员对此问题的反馈是:“这些问题一般都不一样。提供一个简单的解决方案往往是一个特例,不推荐。”

我的问题是:

  1. 它们是否可以与一部分操作互换?我很感激 DatetimeIndex提供了更多功能,但我只需要基本功能,例如切片和索引。
  2. 对于可翻译为numpy的操作,结果是否存在任何记录的差异?
  3. 在我的研究中,我发现一些帖子提到“并不总是兼容” - 但它们似乎都没有任何确凿的参考/文档,或者说明为什么/何时它们通常是不兼容的。许多其他帖子使用numpy表示而不发表评论。

1 个答案:

答案 0 :(得分:10)

在我看来,你应该总是喜欢使用Timestamp - 在需要的情况下,它可以很容易地转换回numpy日期时间。

numpy.datetime64本质上是一个薄的包装器int64。它几乎没有日期/时间特定的功能。

pd.Timestampnumpy.datetime64的包装器。它由相同的int64值支持,但支持整个datetime.datetime接口,以及有用的特定于熊猫的功能。

这两者的数组内表示是相同的 - 它是一个连续的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)