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

如何在Pandas中将#h #m #s格式时间数据拆分为时分秒列?

最优解决方案:分工具场景实现时间单位拆分

这问题我日常处理数据时碰到过好几次,核心思路都是用正则匹配提取对应单位的数值,缺失的单位补0,具体实现要看你用什么工具——下面给你列几个最常用场景的最优方法:

1. Excel/Google Sheets(轻量表格处理首选)

直接用REGEXEXTRACT结合IFERROR就能搞定,不用写宏,公式复制就能用:

  • h列公式:=IFERROR(VALUE(REGEXEXTRACT(A2,"(\d+)h")),0)
  • m列公式:=IFERROR(VALUE(REGEXEXTRACT(A2,"(\d+)m")),0)
  • s列公式:=IFERROR(VALUE(REGEXEXTRACT(A2,"(\d+)s")),0)

原理说明:

  • REGEXEXTRACT(A2,"(\d+)h"):从A2单元格的字符串里提取出跟在数字后面的"h"对应的数字部分
  • VALUE():把提取到的文本转成数值
  • IFERROR(...,0):如果找不到对应单位(比如没有h),就返回0补位

2. Python Pandas(大数据量/自动化分析首选)

如果你的数据是在DataFrame里,写个简单的自定义函数就能批量拆分,效率很高:

import pandas as pd
import re

def parse_time(time_str):
    # 匹配所有"数字+单位"的组合
    time_matches = re.findall(r'(\d+)([hms])', time_str)
    # 初始化默认值为0的字典
    time_dict = {'h': 0, 'm': 0, 's': 0}
    # 把匹配到的数值填充到对应单位
    for num, unit in time_matches:
        time_dict[unit] = int(num)
    # 返回Series,方便直接拆成列
    return pd.Series(time_dict)

# 假设你的数据列叫"Case Processing Time (sum)"
df[['h', 'm', 's']] = df['Case Processing Time (sum)'].apply(parse_time)

优势:

  • 支持批量处理上万行数据,比手动拖公式快N倍
  • 可以灵活扩展(比如后续要处理d天的单位,只需要改字典和正则)

3. SQL(数据库内数据处理首选)

如果数据存在数据库里,可以用正则函数直接在SQL里拆分,不用导出到其他工具:

MySQL/MariaDB示例:

SELECT
  IFNULL(CAST(REGEXP_SUBSTR(time_col, '[0-9]+(?=h)') AS UNSIGNED), 0) AS h,
  IFNULL(CAST(REGEXP_SUBSTR(time_col, '[0-9]+(?=m)') AS UNSIGNED), 0) AS m,
  IFNULL(CAST(REGEXP_SUBSTR(time_col, '[0-9]+(?=s)') AS UNSIGNED), 0) AS s
FROM your_table;

PostgreSQL示例:

SELECT
  COALESCE((REGEXP_MATCH(time_col, '(\d+)h'))[1]::INT, 0) AS h,
  COALESCE((REGEXP_MATCH(time_col, '(\d+)m'))[1]::INT, 0) AS m,
  COALESCE((REGEXP_MATCH(time_col, '(\d+)s'))[1]::INT, 0) AS s
FROM your_table;

总结

  • 日常小量数据用Excel/Google Sheets公式最快,不用写代码
  • 数据分析/批量处理用Pandas最灵活高效
  • 数据库内数据直接用SQL正则提取,避免数据导出导入的麻烦

内容的提问来源于stack exchange,提问作者Eren Han

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:52:35