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
相关产品推荐
相关产品推荐

