时间差#

时间差是时间的差值,以不同的时间单位表示,例如天、小时、分钟、秒。它们可以是正数也可以是负数。

Timedeltadatetime.timedelta 的一个子类,行为类似,但也允许兼容 np.timedelta64 类型以及大量的自定义表示、解析和属性。

解析#

您可以通过多种参数来构造一个 Timedelta 标量,包括 ISO 8601 Duration 字符串。

DateOffsetsDay, 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、TimedeltaIndexTimedelta 可以通过 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 属性直接访问 TimedeltaTimedeltaIndex 的各种组件。这些与 datetime.timedelta 返回的值相同,例如,.seconds 属性表示大于等于 0 且小于 1 天的秒数。这些值根据 Timedelta 的符号而定。

这些操作也可以通过 Series.dt 属性直接访问。

备注

请注意,属性 不是 Timedelta 的显示值。使用 .components 来检索显示值。

对于 Series

您可以直接访问标量 Timedelta 字段的值。

您可以使用 .components 属性访问 timedelta 的精简形式。这将返回一个索引与 Series 类似的 DataFrame。这些是 Timedelta显示 值。

您可以使用 .isoformat 方法将 Timedelta 转换为 ISO 8601 Duration 字符串。

TimedeltaIndex#

要生成包含时间差的索引,您可以使用 TimedeltaIndextimedelta_range() 构造函数。

使用 TimedeltaIndex,您可以传递类似字符串、Timedeltatimedeltanp.timedelta64 的对象。传递 np.nan/pd.NaT/nat 将表示缺失值。

可以传递字符串 ‘infer’ 以在创建时将索引的频率设置为推断出的频率:

生成时间差范围#

date_range() 类似,您可以使用 timedelta_range() 构建 TimedeltaIndex 的规则范围。 timedelta_range 的默认频率是日历日:

timedelta_range 可以使用 startendperiods 的各种组合:

freq 参数可以传递各种 frequency aliases

通过指定 startendperiods,将生成一个从 startend``(包含两端)的、均匀分布的时间差(timedelta)序列,该 ``TimedeltaIndex 中包含 periods 个元素:

使用 TimedeltaIndex#

和其它类日期时间索引一样,DatetimeIndexPeriodIndex,你可以使用 TimedeltaIndex 作为 pandas 对象的索引。

选择(Selections)的操作方式类似,支持字符串强制转换和切片:

此外,你还可以在部分字符串选择中使用它,范围将被推断出来:

操作#

最后,TimedeltaIndexDatetimeIndex 的结合,允许进行某些保留 NaT 的组合操作:

转换#

类似于上面 Series 的频率转换,你可以将这些索引转换为产生另一个 Index。

标量(Scalar)类型的操作也同样适用。这些操作可能会返回一个*不同*类型的索引。

重采样#

类似于 timeseries resampling ,我们可以使用 TimedeltaIndex 进行重采样。