Python如何将整数型时间列转换为HH:MM格式的datetime标准时间
整数时间列转HH:MM格式实现方案
这类整数时间是业务场景中常见的HHMM拼接编码,即值为小时*100 + 分钟,直接调用pd.to_datetime时pandas默认会将整数识别为Unix时间戳,无法匹配编码规则因此转换失败,可参考以下方案实现:
Pandas 批量处理DataFrame列(适配pandas使用场景)
核心思路是先将整数统一补为4位字符串,指定%H%M格式明确解析规则,避免被误判为时间戳:
import pandas as pd # 构造样例数据 df = pd.DataFrame({'time_int': [800, 1430, 1250, 1020, 407]}) # 1. 转为标准datetime对象(适合后续做时间计算、时间差统计) df['time_datetime'] = pd.to_datetime( df['time_int'].astype(str).str.zfill(4), # 补零为4位,比如407→"0407"、800→"0800" format='%H%M' # 明确指定解析规则:前两位小时、后两位分钟 ) # 2. 格式化为HH:MM样式的字符串 df['time_str'] = df['time_datetime'].dt.strftime('%H:%M')
运行后结果完全匹配预期:
| time_int | time_str |
|---|---|
| 800 | 08:00 |
| 1430 | 14:30 |
| 1250 | 12:50 |
| 1020 | 10:20 |
| 407 | 04:07 |
如果不需要做时间计算,只需要字符串结果,可以直接用算术拆分+字符串格式化,性能比datetime解析高3~5倍,适合百万级以上大数据量:
df['time_str_fast'] = df['time_int'].apply( lambda x: f"{x//100:02d}:{x%100:02d}" )
原生Python datetime 单值处理
如果不依赖pandas,可以直接拆分时分后组装为datetime.time对象再格式化:
from datetime import time def int_to_time(time_int: int) -> str: hour = time_int // 100 minute = time_int % 100 # 组装为标准时间对象 t = time(hour=hour, minute=minute) # 返回HH:MM格式字符串 return t.strftime('%H:%M') # 测试样例 test_list = [800, 1430, 1250, 1020, 407] for val in test_list: print(int_to_time(val))
常见报错原因说明
- 直接调用
pd.to_datetime(整数列)失败:pandas默认将整数输入识别为Unix时间戳(单位随版本变化为纳秒/毫秒/秒),完全不匹配HHMM拼接的编码规则 - 直接调用
strftime失败:strftime是datetime/time对象的实例方法,整数类型没有该方法,必须先完成解析拿到合法时间对象才能调用 - 解析报
hour must be in 0..23/minute must be in 0..59错误:先排查数据中是否存在异常值,比如大于2359的数值、取模100后结果大于59的数值,这类值不符合时间编码规则,需要先清洗。
内容的提问来源于stack exchange,提问作者Chuen
相关产品推荐
相关产品推荐

