You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame:提取保留一位小数的时间差小时数

解决保留一位小数的时间差小时数提取问题

嘿,我来帮你搞定这个问题!你之前用的astype('timedelta64[h]')之所以会取整,是因为这个操作直接把时间差截断为整数小时了——就像8小时24分钟会被直接变成8小时,之后再用round(1)自然也没办法找回丢失的小数部分啦。

下面给你两种靠谱的方法,能精准得到保留一位小数的小时数:

方法一:通过总秒数转换计算

利用pandas里timedelta对象的dt.total_seconds()方法,先把时间差转换成总秒数,再除以3600(1小时=3600秒)得到带小数的小时数,最后再保留一位小数:

# 计算带小数的小时数
hour_diff = (arm['EndTime'] - arm['StartTime']).dt.total_seconds() / 3600
# 保留一位小数
hour_diff_rounded = hour_diff.round(1)

方法二:直接拆分时分计算(可选)

如果你想更直观地拆分分钟和小时,也可以用dt.components提取小时和分钟,再把分钟转换成小时的小数部分:

time_diff = arm['EndTime'] - arm['StartTime']
# 提取小时和分钟
hours = time_diff.dt.components['hours']
minutes = time_diff.dt.components['minutes']
# 计算总小时数(分钟转小时:分钟数/60)
hour_diff = hours + minutes / 60
# 保留一位小数
hour_diff_rounded = hour_diff.round(1)

举个实际例子验证一下:
假设你的数据是这样的:

import pandas as pd
arm = pd.DataFrame({
    'StartTime': pd.to_datetime(['2024-01-01 08:00:00', '2024-01-01 09:12:00']),
    'EndTime': pd.to_datetime(['2024-01-01 16:24:00', '2024-01-01 18:24:00'])
})

用方法一计算后,hour_diff_rounded的结果就是:

0    8.4
1    9.2
dtype: float64

完全符合你想要的结果!

内容的提问来源于stack exchange,提问作者Harish reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 19:02:59