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

如何在Python Pandas中将格式不规则的时长转为总秒数?

处理Pandas中不规则日期时间转总秒数的方案

嘿,这问题我熟!处理Pandas里格式混乱的duration列确实挺头疼的,尤其是混合了纯时间和日期+时间格式的情况。我给你两种实用的解决方案,帮你把这些值都转成总秒数:

方法一:通用自动识别法

这个方法利用Pandas的日期时间解析特性,自动统一处理两种格式:

import pandas as pd

# 假设你的DataFrame名为df,目标列是'duration'
df['datetime'] = pd.to_datetime(df['duration'])

# 计算每个datetime与基准日期(1900-01-01)的时间差,提取总秒数
# 纯时间会被自动解析为该基准日期的对应时间,差就是纯时长
df['total_seconds'] = (df['datetime'] - pd.Timestamp('1900-01-01')).dt.total_seconds()

逻辑说明:

  • 纯时间字符串(比如"01:30:00")会被解析为1900-01-01 01:30:00,和基准日期的差就是01:30:00,转成总秒数为5400,完全符合时长需求。
  • 日期+时间格式的字符串(比如"2023-10-05 02:15:00")会被解析为完整的datetime,和基准日期的差就是从1900年到该日期的总时长,转成秒数就是对应的总duration。

如果你的日期+时间其实是当天的时间点(只想提取当天的时分秒转成秒数),可以改成这个版本:

def get_daily_seconds(dt):
    return dt.hour * 3600 + dt.minute * 60 + dt.second

df['datetime'] = pd.to_datetime(df['duration'])
df['total_seconds'] = df['datetime'].apply(get_daily_seconds)

方法二:自定义鲁棒函数(处理异常值)

如果有些值格式特别奇怪,上面的方法报错,推荐用带异常捕获的自定义函数,更灵活:

import pandas as pd

def convert_to_seconds(dur_str):
    try:
        # 先尝试把值当成纯时间转成时间差(Timedelta)
        td = pd.to_timedelta(dur_str)
        return td.total_seconds()
    except ValueError:
        try:
            # 转成datetime后,计算与基准日期的时间差
            dt = pd.to_datetime(dur_str)
            delta = dt - pd.Timestamp('1900-01-01')
            return delta.total_seconds()
        except ValueError:
            # 遇到无法解析的值,返回NaN方便后续清洗(可按需修改)
            return pd.NA

df['total_seconds'] = df['duration'].apply(convert_to_seconds)

逻辑说明:
这个函数会优先尝试解析纯时间格式,失败后再尝试解析日期+时间格式,还能处理无法解析的异常值,返回NaN避免整个代码崩溃,适合格式特别混乱的数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:24:27