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

Python中如何将DataFrame内多格式字符串转换为时分秒格式的time object

嘿,我来帮你搞定这个时间格式统一的问题!看起来你DataFrame里的timeStarted_timeWhenPuzzlesShownOnScreen列混着不同格式的时间字符串,要转成标准的时:分:秒格式甚至time对象对吧?下面是我在处理这类问题时常用的解决方案,用Python+pandas就能轻松实现:

1. 先写一个自定义处理函数

我们可以针对不同的时间格式分支处理,先判断字符串的分隔符数量,再补全成标准格式:

import pandas as pd
from datetime import datetime

def normalize_time(time_str):
    # 先处理空值或者非字符串的异常情况
    if pd.isna(time_str) or not isinstance(time_str, str):
        return None
    
    parts = time_str.split(':')
    # 根据分隔符数量判断原格式
    if len(parts) == 3:
        # 已经是HH:MM:SS格式,先校验合法性再返回
        try:
            # 校验格式是否正确
            datetime.strptime(time_str, '%H:%M:%S')
            # 如果要直接转成time对象,就用下面这句替换return time_str
            # return datetime.strptime(time_str, '%H:%M:%S').time()
            return time_str
        except ValueError:
            return None  # 非法格式返回空值
    elif len(parts) == 2:
        # 是MM:SS格式,补上前导的00作为小时
        try:
            datetime.strptime(time_str, '%M:%S')
            formatted = f'00:{time_str}'
            # 转time对象的话:return datetime.strptime(formatted, '%H:%M:%S').time()
            return formatted
        except ValueError:
            return None
    elif len(parts) == 1:
        # 只有纯秒数,计算转成HH:MM:SS
        try:
            total_secs = int(time_str)
            hours = total_secs // 3600
            remaining_secs = total_secs % 3600
            minutes = remaining_secs // 60
            secs = remaining_secs % 60
            formatted = f'{hours:02d}:{minutes:02d}:{secs:02d}'
            # 转time对象:return datetime.strptime(formatted, '%H:%M:%S').time()
            return formatted
        except ValueError:
            return None
    else:
        # 其他异常格式(比如多个冒号),返回空值或者自定义占位符
        return None
2. 把函数应用到DataFrame列上

假设你的DataFrame名叫df,直接用apply方法批量处理:

# 生成格式化后的字符串列
df['standardized_time'] = df['timeStarted_timeWhenPuzzlesShownOnScreen'].apply(normalize_time)

# 如果要直接得到time对象列,记得把函数里的return改成time对象的那句
额外小提示
  • 如果你的数据里还有像1:2:3这种不带前导零的格式,上面的函数已经通过{hours:02d}这类格式化语法自动补零了,不用额外处理。
  • 如果需要处理带毫秒的特殊格式(比如HH:MM:SS.sss),可以在函数里再加对应的分支,用%H:%M:%S.%f的格式串来校验和转换。

内容的提问来源于stack exchange,提问作者Rebecca Netson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 05:32:48