从 Pandas Timedelta 获取总小时数?

Posted

技术标签:

【中文标题】从 Pandas Timedelta 获取总小时数?【英文标题】:Get total number of hours from a Pandas Timedelta? 【发布时间】:2015-09-25 19:01:53 【问题描述】:

如何获取 Pandas 时间增量中的总小时数?

例如:

>>> td = pd.Timedelta('1 days 2 hours')
>>> td.get_total_hours()
26

注意:根据文档,.hours 属性将返回小时组件

>>> td.hours
2

【问题讨论】:

【参考方案1】:

只需找出 1 小时内有多少 timedeltas 适合它:

import numpy as np

>> td / np.timedelta64(1, 'h')
26.0

【讨论】:

我更喜欢pd.Timedelta(hours=1),因为 OP 已经在使用 pandas。 想知道为什么没有 Timedelta.hours 属性。【参考方案2】:

试着说明为什么 pandas 会返回 2 小时。

import pandas as pd

td = pd.Timedelta('1 days 2 hours')

td.components

Out[45]: Components(days=1, hours=2, minutes=0, seconds=0, milliseconds=0, microseconds=0, nanoseconds=0)

td / pd.Timedelta('1 hour')

Out[46]: 26.0

【讨论】:

【参考方案3】:

我得到了以秒为单位的时间增量,然后除以 3600 得到小时

round(td.total_seconds() / 3600).

当我在 jupyter notebook 中测试时,这种方法运行得更快

%timeit td / np.timedelta64(1, 'h') 
The slowest run took 19.10 times longer than the fastest. This could mean that an intermediate result is being cached. 
100000 loops, best of 3: 4.58 µs per loop

%timeit round(td.total_seconds() / 3600)
The slowest run took 18.08 times longer than the fastest. This could mean that an intermediate result is being cached.
1000000 loops, best of 3: 401 ns per loop

【讨论】:

以上是关于从 Pandas Timedelta 获取总小时数?的主要内容,如果未能解决你的问题,请参考以下文章

Pandas | 22 时间差

从 TimeDelta 到 Pandas 中的浮动天数

从 timedelta 构建 Pandas pd.tseries.offsets

如何让 pandas.read_csv() 从 CSV 文件列中推断 datetime 和 timedelta 类型?

pandas读取csv数据为dataframe计算dataframe中相连两行数据(记录)的时间差并将时间差从timedelta对象转化为整数

pandas通过DatetimeProperties对象获取日期对象的星期几周几信息编码(周一为0,周天为6)使用pd.to_timedelta函数将时间列所有时间数据处理到当周的周三(星期三)