时间差#
时间差是时间的差值,以不同的时间单位表示,例如天、小时、分钟、秒。它们可以是正数也可以是负数。
Timedelta 是 datetime.timedelta 的一个子类,行为类似,但也允许兼容 np.timedelta64 类型以及大量的自定义表示、解析和属性。
解析#
您可以通过多种参数来构造一个 Timedelta 标量,包括 ISO 8601 Duration 字符串。
DateOffsets (Day, Hour, Minute, Second, Milli, Micro, Nano)也可以用于构造。
此外,标量之间的运算也会产生另一个标量 Timedelta。
to_timedelta#
使用顶层函数 pd.to_timedelta,您可以将标量、数组、列表或 Series 从一个已识别的时间差格式/值转换为 Timedelta 类型。如果输入是 Series,它将构造 Series;如果输入是标量类,它将构造标量;否则,它将输出一个 TimedeltaIndex。
可以将单个字符串解析为 Timedelta:
或者字符串列表/数组:
如果输入是数值型的,则 unit 关键字参数指定 Timedelta 的单位:
警告
如果作为输入传递的是字符串或字符串数组,则将忽略 unit 关键字参数。如果传递的字符串不带单位,则假定默认单位为纳秒。
Timedelta 限制#
pandas 使用 64 位整数以纳秒分辨率表示 Timedeltas。因此,64 位整数的限制决定了 Timedelta 的限制。
操作#
您可以在 Series/DataFrames 上进行操作,并通过对 datetime64[ns] Series 或 Timestamps 进行减法运算来构造 timedelta64[ns] Series。
与 timedelta64[ns] Series 中的标量进行操作:
支持包含 NaT 值的 Timedeltas Series:
元素可以设置为 NaT,类似于 datetimes,可以使用 np.nan:
操作数也可以以反向顺序出现(单个对象与 Series 进行操作):
支持对 DataFrames 的 min, max 以及相应的 idxmin, idxmax 操作:
Series 也支持 min, max, idxmin, idxmax 操作。标量结果将是 Timedelta。
您可以使用 fillna 对 timedeltas 进行填充,传递一个 timedelta 来获取特定值。
您还可以对 Timedeltas 进行取负、乘法和使用 abs:
规约#
timedelta64[ns] 的数值规约操作将返回 Timedelta 对象。如常,在评估过程中会跳过 NaT。
频率转换#
Timedelta Series、TimedeltaIndex 和 Timedelta 可以通过 astype 转换为特定的 timedelta dtype 来转换为其他频率。
对于除支持的 “s”, “ms”, “us”, “ns” 之外的 timedelta64 分辨率,另一种方法是除以另一个 timedelta 对象。请注意,除以 NumPy 标量是真除法,而 astype 相当于整除。
将 timedelta64[ns] Series 除以或乘以整数或整数 Series 会得到另一个 timedelta64[ns] dtypes Series。
将 timedelta64[ns] Series 除以标量 Timedelta 的向上取整除法(整除)会得到一个整数 Series。
当与另一个 timedelta 类型或数值参数进行操作时,Timedelta 定义了模 (%) 和整除/取余(divmod)操作。
属性#
您可以通过 days,seconds,microseconds,nanoseconds 属性直接访问 Timedelta 或 TimedeltaIndex 的各种组件。这些与 datetime.timedelta 返回的值相同,例如,.seconds 属性表示大于等于 0 且小于 1 天的秒数。这些值根据 Timedelta 的符号而定。
这些操作也可以通过 Series 的 .dt 属性直接访问。
备注
请注意,属性 不是 Timedelta 的显示值。使用 .components 来检索显示值。
对于 Series:
您可以直接访问标量 Timedelta 字段的值。
您可以使用 .components 属性访问 timedelta 的精简形式。这将返回一个索引与 Series 类似的 DataFrame。这些是 Timedelta 的 显示 值。
您可以使用 .isoformat 方法将 Timedelta 转换为 ISO 8601 Duration 字符串。
TimedeltaIndex#
要生成包含时间差的索引,您可以使用 TimedeltaIndex 或 timedelta_range() 构造函数。
使用 TimedeltaIndex,您可以传递类似字符串、Timedelta、timedelta 或 np.timedelta64 的对象。传递 np.nan/pd.NaT/nat 将表示缺失值。
可以传递字符串 ‘infer’ 以在创建时将索引的频率设置为推断出的频率:
生成时间差范围#
与 date_range() 类似,您可以使用 timedelta_range() 构建 TimedeltaIndex 的规则范围。 timedelta_range 的默认频率是日历日:
timedelta_range 可以使用 start、end 和 periods 的各种组合:
freq 参数可以传递各种 frequency aliases :
通过指定 start、end 和 periods,将生成一个从 start 到 end``(包含两端)的、均匀分布的时间差(timedelta)序列,该 ``TimedeltaIndex 中包含 periods 个元素:
使用 TimedeltaIndex#
和其它类日期时间索引一样,DatetimeIndex 和 PeriodIndex,你可以使用 TimedeltaIndex 作为 pandas 对象的索引。
选择(Selections)的操作方式类似,支持字符串强制转换和切片:
此外,你还可以在部分字符串选择中使用它,范围将被推断出来:
操作#
最后,TimedeltaIndex 与 DatetimeIndex 的结合,允许进行某些保留 NaT 的组合操作:
转换#
类似于上面 Series 的频率转换,你可以将这些索引转换为产生另一个 Index。
标量(Scalar)类型的操作也同样适用。这些操作可能会返回一个*不同*类型的索引。
重采样#
类似于 timeseries resampling ,我们可以使用 TimedeltaIndex 进行重采样。