如何将1-4位数字转为%H%M格式?Fedex数据集时间转换报错求助
解决Fedex数据集时间列格式转换问题
问题场景
数据集的Actual_Shipment_Time列包含1-4位数字字符串(如'5'、'23'、'345'、'2145'),需要转换为HH:MM格式,但执行以下代码时报错:
df['Actual_Shipment_Time'] = pd.to_datetime(df['Actual_Shipment_Time'], format = '%H%M').dt.strftime('%H%M')
错误信息:
ValueError: time data '9' does not match format '%H%M' (match)
解决方案
报错核心原因是%H%M格式要求输入必须是4位数字(对应2位小时+2位分钟),但数据中存在1-3位的短字符串,无法匹配格式。解决思路是先统一补前导零至4位,再进行时间转换。
完整实现代码
# 先将所有时间字符串转为字符串类型并补前导零到4位 df['Actual_Shipment_Time'] = df['Actual_Shipment_Time'].astype(str).str.zfill(4) # 转换为目标时间格式(24小时制) df['Actual_Shipment_Time'] = pd.to_datetime(df['Actual_Shipment_Time'], format='%H%M').dt.strftime('%H:%M')
12小时制格式适配
如果需要输出12小时制格式,只需修改strftime的格式参数:
df['Actual_Shipment_Time'] = pd.to_datetime(df['Actual_Shipment_Time'], format='%H%M').dt.strftime('%I:%M %p')
转换结果验证
| 原始输入 | 24小时制输出 | 12小时制输出 |
|---|---|---|
| 5 | 00:05 | 12:05 AM |
| 23 | 00:23 | 12:23 AM |
| 345 | 03:45 | 03:45 AM |
| 2145 | 21:45 | 09:45 PM |
内容的提问来源于stack exchange,提问作者Ibad Ullah
相关产品推荐
相关产品推荐

