为何np.diff对无时区与时区感知索引的处理方式不同?
np.diff处理无时区与时区感知时间戳的差异原因
先看两种场景的代码示例:
无时区时间戳的处理结果
import numpy as np import pandas as pd np.diff(pd.DatetimeIndex(["2024-11-24", "2024-11-25"])) # 输出:array([86400000000000], dtype='timedelta64[ns]')
时区感知时间戳的处理结果
import numpy as np import pandas as pd np.diff(pd.DatetimeIndex(["2024-11-24 00:00 UTC", "2024-11-25 00:00 UTC"])) # 输出:array([Timedelta('1 days 00:00:00')], dtype=object)
差异原因
- 无时区的
DatetimeIndex底层是numpy原生支持的datetime64[ns]类型数组,np.diff可以直接对这种类型做数值化的时间差计算,返回同样是numpy原生的timedelta64[ns]类型数组,用纳秒数的数值形式表示时间差。 - 时区感知的
DatetimeIndex中的元素是pandas扩展的Timestamp对象(带时区信息),而numpy本身没有支持带时区的datetime类型。当np.diff处理这类对象数组时,只能通过调用Timestamp对象的减法运算得到Timedelta对象,最终返回的是dtype为object的数组,里面存储的是Timedelta实例。
内容的提问来源于stack exchange,提问作者sds
相关产品推荐
相关产品推荐

