如何将timedelta转换为小时格式?含DataFrame实例转换需求
解决Pandas Timedelta转小时格式及数值的问题
嗨,刚好我经常处理这类时间转换需求,来给你一步步讲清楚~
一、将Timedelta转为「总小时数:分:秒」格式
你想要把带天数的timedelta转成类似93:02:05这种格式,核心思路是把天数换算成小时,再和原有的小时数相加,最后拼接上原有的分秒部分就行。
直接上代码示例(用你给的测试数据):
import pandas as pd # 先构造你的示例DataFrame df = pd.DataFrame({ 'JC time': [ pd.Timedelta("3days 21:02:05"), pd.Timedelta("1days 23:50:07"), pd.Timedelta("6days 19:28:36") ] }) # 计算总小时数:天数×24 + 原有小时数 total_hours = df['JC time'].dt.days * 24 + df['JC time'].dt.hours # 提取分秒部分,用strftime格式化 time_part = df['JC time'].dt.strftime("%M:%S") # 拼接成目标格式 df['JC time_formatted'] = total_hours.astype(str) + ":" + time_part print(df['JC time_formatted'])
运行后输出就是你要的:
0 93:02:05 1 47:50:07 2 163:28:36 Name: JC time_formatted, dtype: object
二、通用的Timedelta转小时数值方法
如果你需要把timedelta转成可用于计算的小时数值(比如带小数的浮点数),最直接的方式是先转成总秒数,再除以3600:
# 转成带小数的小时数 df['JC time_hours'] = df['JC time'].dt.total_seconds() / 3600 print(df['JC time_hours'])
输出结果是:
0 93.034722 1 47.835278 2 163.476667 Name: JC time_hours, dtype: float64
这个方法适用于所有timedelta场景,不管有没有天数、分钟、秒数,都能准确算出总小时数。
小提示:如果你的timedelta包含毫秒甚至微秒,total_seconds()也会一并计算进去,结果会更精准哦~
内容的提问来源于stack exchange,提问作者lincplus htm
相关产品推荐
相关产品推荐

