Pandas:如何将时间差转换为小时.分钟格式的浮点数
实现时间差的「小时.分钟」数值格式显示
你需要将datetime类型的时间差转换为小时数.分钟数的数值格式(比如7小时36分显示为7.36,24小时41分显示为24.41),而不是常规的将分钟换算为小时比例的小数(比如7.6、24.683333)。
解决方法
核心思路是拆分时间差的总小时数和分钟数,直接将分钟数作为小数点后两位拼接成目标数值:
- 计算两个datetime列的时间差
- 将时间差中的天数转换为小时,加上原有的小时部分得到总小时数
- 提取时间差的分钟数
- 用「总小时数 + 分钟数/100」得到目标格式的数值
完整代码
import pandas as pd lines = [ "2023-11-12T10:36:00\t2023-11-12T03:00:00", "2023-11-12T00:41:00\t2023-11-11T00:00:00" ] data = pd.DataFrame([l.split('\t') for l in lines], columns=['c1', 'c2']) data["c1"] = pd.to_datetime(data["c1"]) data["c2"] = pd.to_datetime(data["c2"]) # 计算时间差 delta = data["c1"] - data["c2"] # 计算总小时数(天数转小时 + 小时部分) total_hours = delta.dt.components.days * 24 + delta.dt.components.hours # 提取分钟数 mins = delta.dt.components.minutes # 生成目标格式的数值 data["c3"] = total_hours + mins / 100 print(data)
输出结果
c1 c2 c3 0 2023-11-12 10:36:00 2023-11-12 03:00:00 7.36 1 2023-11-12 00:41:00 2023-11-11 00:00:00 24.41
如果需要强制保留两位小数(比如分钟数小于10时显示为两位,如5分钟显示为05),可以先格式化字符串再转数值:
data["c3"] = pd.to_numeric(total_hours.astype(str) + '.' + mins.astype(str).str.zfill(2))
内容的提问来源于stack exchange,提问作者bbasaran
相关产品推荐
相关产品推荐

