微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

当与熊猫中的DatetimeIndex进行比较时,这个问题的动机是an answerquestion on improving performance.

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

大熊猫的一位开发人员对这个问题的反馈是:“这些一般都不一样.提供一个numpy解决方案通常是一个特殊情况,不推荐.”

我的问题是:

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

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

> Pandas DatetimeIndex indexing dtype: datetime64 vs Timestamp
> How to convert from pandas.DatetimeIndex to numpy.datetime64?

解决方法:

在我看来,你应该总是喜欢使用时间戳 – 它可以在需要时轻松转换回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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐