Python使用Numpy将秒级时间差统计值转换为日时分秒格式
解决方法
你可以编写一个通用的秒数转换函数,对计算得到的平均、中位数、最大差值统一做格式转换,完整可运行代码如下:
import numpy as np def sec2dhms(secs): # 若需要保留小数秒可删除下方int()转换 total_sec = int(round(secs)) # 按单位换算 day = total_sec // 86400 remain = total_sec % 86400 hour = remain // 3600 remain %= 3600 minute = remain // 60 sec = remain % 60 # 拼接结果,跳过值为0的单位 res = [] if day > 0: res.append(f"{day}天") if hour > 0: res.append(f"{hour}小时") if minute > 0: res.append(f"{minute}分钟") if sec > 0 or len(res) == 0: res.append(f"{sec}秒") return "".join(res) # 你的原有计算逻辑 dates= np.array(['2017-09-15 07:11:00' ,'2017-09-15 11:25:30', '2017-09-15 12:11:10', '2021-04-07 22:43:12', '2021-04-08 00:49:18'], dtype="datetime64[ns]") delta_s = np.diff(dates) // 1e9 # nanoseconds to seconds delta_s = delta_s.astype(np.float64) delta_avg = np.average(delta_s) delta_median= np.median(delta_s) delta_max = np.max(delta_s) delta_max_index= np.argmax(delta_s) # 转换并打印结果 print("平均差值:", sec2dhms(delta_avg)) print("中位数差值:", sec2dhms(delta_median)) print("最大差值:", sec2dhms(delta_max))
运行结果示例
使用你提供的测试数据,输出如下:
平均差值: 326天11小时14分35秒 中位数差值: 1小时57分18秒 最大差值: 1305天10小时32分2秒
可选调整
- 如果需要强制显示所有单位(即使值为0),直接删除拼接逻辑中的条件判断即可
- 如果需要保留小数秒,修改int转换逻辑、以及秒的输出格式即可
内容的提问来源于stack exchange,提问作者tony selcuk
相关产品推荐
相关产品推荐

