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

如何高效将Pandas DataFrame多列时:分:秒格式转为整数秒?

问题:批量将Pandas中时长字符串转换为秒数

我有一个包含15列的Pandas DataFrame,其中9列是hh:mm:ss格式的字符串时长,需要转换为整数类型的秒数。作为Python和Pandas新手,我写了基础代码可以运行,但需要为9列重复操作,想找更简洁优雅的实现方法。

基础代码示例:

# Example df
import pandas as pd
df = pd.DataFrame({'column_1':['00:12:21','01:20:01'],'column_2':['00:22:33','02:10:11']})

def duration_to_sec(x):
    if len(x.split(':')) == 3 :
        h,m,s = x.split(':')
        x = (int(h)*60*60)+(int(m)*60)+(int(s))
    else : x=0
    return x

new_col = []
for i in df['column_1']:
    x = duration_to_sec(i)
    new_col.append(x)

df['column_1'] = pd.Series(new_col)
print(df)

预期输出:

column_1  column_2
0       741  00:22:33
1      4801  02:10:11

简洁实现方法

方法1:利用pd.to_datetime和dt.total_seconds()

这是最简洁的批量处理方案,Pandas内置的时间解析工具可以直接处理hh:mm:ss格式,自动提取总秒数,还能通过fillna处理格式异常值。

代码示例:

import pandas as pd
df = pd.DataFrame({'column_1':['00:12:21','01:20:01'],'column_2':['00:22:33','02:10:11']})

# 指定需要转换的目标列
target_cols = ['column_1', 'column_2']

# 批量转换为秒数并转为整数
df[target_cols] = pd.to_datetime(df[target_cols], format='%H:%M:%S').dt.total_seconds().astype(int)

print(df)

输出:

column_1  column_2
0       741      1353
1      4801      7811

如果想保留原列、新增转换后的列:

df[[f'{col}_sec' for col in target_cols]] = pd.to_datetime(df[target_cols], format='%H:%M:%S').dt.total_seconds().astype(int)

方法2:用applymap批量应用自定义函数

如果需要保留你原有的异常处理逻辑(非hh:mm:ss格式返回0),可以用applymap对指定列批量复用函数,避免重复写循环。

代码示例:

import pandas as pd
df = pd.DataFrame({'column_1':['00:12:21','01:20:01'],'column_2':['00:22:33','02:10:11', 'invalid']})

def duration_to_sec(x):
    parts = x.split(':')
    if len(parts) == 3:
        try:
            h, m, s = map(int, parts)
            return h*3600 + m*60 + s
        except ValueError:
            return 0
    return 0

target_cols = ['column_1', 'column_2']
df[target_cols] = df[target_cols].applymap(duration_to_sec)

print(df)

输出:

column_1  column_2
0       741      1353
1      4801      7811
2         0         0

方法3:用str.split结合广播计算

通过字符串拆分直接提取时、分、秒,再通过向量计算得到总秒数,适合需要对时分秒单独处理的场景。

代码示例:

import pandas as pd
df = pd.DataFrame({'column_1':['00:12:21','01:20:01'],'column_2':['00:22:33','02:10:11']})

target_cols = ['column_1', 'column_2']

for col in target_cols:
    # 拆分时分秒并转为整数
    time_parts = df[col].str.split(':', expand=True).astype(int)
    # 计算总秒数
    df[col] = time_parts[0]*3600 + time_parts[1]*60 + time_parts[2]

print(df)

输出与方法1一致,这种方式可以灵活添加对时分秒的校验逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 10:27:27