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

jpp*_*jpp 11 python arrays datetime numpy pandas

这个问题的动机是与in in 进行比较时提高绩效问题的答案.DatetimeIndexpandas

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

其中一位开发人员对这个问题的反馈pandas是:"这些问题一般都不一样.提供一个numpy解决方案往往是一个特殊情况,不推荐."

我的问题是:

  1. 它们是否可以与一部分操作互换?我很欣赏 DatetimeIndex提供更多功能,但我只需要基本的功能,如切片和索引.
  2. 对于可翻译的操作,结果是否有任何记录的差异numpy

在我的研究中,我发现一些帖子提到"并不总是兼容" - 但它们似乎都没有任何结论性的引用/文档,或者说明为什么/何时它们通常是不兼容的.许多其他帖子使用该numpy表示而没有评论.

chr*_*isb 10

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

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

pd.Timestamp是一个包装的numpy.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)
Run Code Online (Sandbox Code Playgroud)

  • 该建议虽然在实践中经常奏效,但非常简单。Numpy 本质上并不比 Pandas 快,更像是 Pandas 经常在内部使用 numpy,所以如果你确切地知道你想要什么,你可以省去一些开销。在这种情况下,无论哪种方式,数组操作都是相同的,只是标量构造更快。 (2认同)