You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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和预期完全一致:

idhourminutesecondperiodhours24
0001121036PM00:10:36
000265459AM06:54:59
000372219AM07:22:19
000441911AM04:19:11
0005103633AM10:36:33
000664718PM18:47:18
0007114935PM23:49:35
0008123345PM00:33:45

说明

  • 字符串格式化使用:02d规则,会自动为不足2位的时、分、秒补前导零,保证输出格式始终符合HH:MM:SS要求
  • 小时计算使用布尔索引做向量化赋值,比逐行判断的写法性能高1~2个数量级,数据量越大优势越明显

内容的提问来源于stack exchange,提问作者Marcos Dias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 10:57:14