pandas实现带AM/PM标识的时分秒字段转24小时制时间
Pandas实现12小时制时间转指定格式24小时制字符串
实现方案
直接使用pandas向量化操作完成转换,执行效率高,适配大数据量场景,逻辑完全匹配给定的转换规则。
完整代码
import pandas as pd # --------------- 测试数据构造(可替换为实际业务DataFrame)--------------- df = pd.DataFrame({ 'id': ['0001', '0002', '0003', '0004', '0005', '0006', '0007', '0008'], 'hour': [12, 6, 7, 4, 10, 6, 11, 12], 'minute': [10, 54, 22, 19, 36, 47, 49, 33], 'second': [36, 59, 19, 11, 33, 18, 35, 45], 'period': ['PM', 'AM', 'AM', 'AM', 'AM', 'PM', 'PM', 'PM'] }) # --------------- 核心转换逻辑 --------------- # 1. 按规则计算24小时制小时值 df['hour_24'] = df['hour'] # 非12点的PM时段,小时值加12 df.loc[(df['period'] == 'PM') & (df['hour'] != 12), 'hour_24'] += 12 # 所有原小时为12的记录,小时值统一置为0 df.loc[df['hour'] == 12, 'hour_24'] = 0 # 2. 拼接为HH:MM:SS格式字符串,自动补前导零 df['hours24'] = df.apply( lambda row: f"{row['hour_24']:02d}:{row['minute']:02d}:{row['second']:02d}", axis=1 ) # 3. 删除中间计算用的临时列 df = df.drop(columns=['hour_24'])
转换结果
执行代码后得到的DataFrame和预期完全一致:
| id | hour | minute | second | period | hours24 |
|---|---|---|---|---|---|
| 0001 | 12 | 10 | 36 | PM | 00:10:36 |
| 0002 | 6 | 54 | 59 | AM | 06:54:59 |
| 0003 | 7 | 22 | 19 | AM | 07:22:19 |
| 0004 | 4 | 19 | 11 | AM | 04:19:11 |
| 0005 | 10 | 36 | 33 | AM | 10:36:33 |
| 0006 | 6 | 47 | 18 | PM | 18:47:18 |
| 0007 | 11 | 49 | 35 | PM | 23:49:35 |
| 0008 | 12 | 33 | 45 | PM | 00:33:45 |
说明
- 字符串格式化使用
:02d规则,会自动为不足2位的时、分、秒补前导零,保证输出格式始终符合HH:MM:SS要求 - 小时计算使用布尔索引做向量化赋值,比逐行判断的写法性能高1~2个数量级,数据量越大优势越明显
内容的提问来源于stack exchange,提问作者Marcos Dias
相关产品推荐
相关产品推荐

