如何将24小时制整数时间值转换为HH:MM:SS格式时间戳
核心错误原因
time.gmtime()的入参要求是1970-01-01 00:00:00 UTC起的累计秒数,你传入的是代表时间点的四位整数,参数类型完全不匹配,自然输出结果错误。time模块下的函数仅支持单个整数输入,无法直接处理pandas Series类型,所以批量转换时会抛出类型错误。
正确转换逻辑
你的输入是四位整数,前两位为小时值,后两位为分钟值,只需要按如下规则处理即可:
- 用整除以100提取小时值,对24取模处理2400转00:00的特殊场景
- 用取模100提取分钟值
- 格式化补零后拼接为
HH:MM:SS格式即可
单值转换实现
def hour_num_to_time(hour_num: int) -> str: hour = (hour_num // 100) % 24 minute = hour_num % 100 return f"{hour:02d}:{minute:02d}:00" # 测试效果 print(hour_num_to_time(1700)) # 输出 17:00:00 print(hour_num_to_time(2400)) # 输出 00:00:00 print(hour_num_to_time(1000)) # 输出 10:00:00
Pandas整列批量转换实现
方法1:调用自定义函数(代码简洁,适合小数据量)
import pandas as pd data = pd.DataFrame({'Hour':[1700, 2400, 1000]}) data['formatted_time'] = data['Hour'].apply(hour_num_to_time) print(data)
方法2:向量化操作(性能更高,适合十万级以上数据量)
import pandas as pd data = pd.DataFrame({'Hour':[1700, 2400, 1000]}) # 拆分小时、分钟并格式化 data['formatted_time'] = ( (data['Hour'] // 100 % 24).astype(str).str.zfill(2) + ":" + (data['Hour'] % 100).astype(str).str.zfill(2) + ":00" ) print(data)
如果你需要转换为datetime时间类型而非字符串,可以额外增加一步转换:
data['time_type'] = pd.to_datetime(data['formatted_time'], format='%H:%M:%S').dt.time
内容的提问来源于stack exchange,提问作者Starbucks
相关产品推荐
相关产品推荐

