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

如何使用Python Pandas将带冒号的时长字符串转换为整数/浮点数/时间类型?

如何使用Python Pandas将带冒号的时长字符串转换为整数/浮点数/时间类型?

嗨,我之前也踩过一模一样的坑!你直接用astype(int)失败太正常了——这些字符串里有冒号,不是纯数字格式,Pandas根本没法直接解析。下面根据你不同的需求,给你几种实用的解决方案:

一、转成总秒数(整数类型)

如果你需要把时长转换成总秒数(比如"20:10"变成1210),有两种简单方法:

  • 方法1:拆分字符串手动计算
test_df['Time_of_possession_sec'] = test_df['Time_of_possession'].apply(
    lambda x: int(x.split(':')[0]) * 60 + int(x.split(':')[1])
)

思路超直观:用split(':')把"20:10"拆成['20', '10'],分别转成整数后,分钟数乘60加上秒数,就得到了纯整数的总秒数。

  • 方法2:用Pandas内置函数更简洁
test_df['Time_of_possession_sec'] = pd.to_timedelta(test_df['Time_of_possession']).dt.total_seconds().astype(int)

pd.to_timedelta能自动识别"MM:SS"这种时长格式,先转成Pandas的Timedelta类型,再用dt.total_seconds()提取总秒数,最后转成整数即可。

二、转成总分钟数(浮点数类型)

如果需要把时长转换成以分钟为单位的浮点数(比如"20:10"≈20.17),可以这么做:

# 方法1:拆分计算
test_df['Time_of_possession_min'] = test_df['Time_of_possession'].apply(
    lambda x: int(x.split(':')[0]) + int(x.split(':')[1]) / 60
)

# 方法2:用Timedelta转换更高效
test_df['Time_of_possession_min'] = pd.to_timedelta(test_df['Time_of_possession']).dt.total_seconds() / 60

两种方法都是把秒数转换成分钟的小数部分,加上原有的分钟数,得到浮点数结果,特别适合做数值统计或者可视化分析。

三、转成时间差类型(Timedelta)

如果你之后要对时长做时间相关的运算(比如求和、比较大小、加减操作),直接转成Pandas的Timedelta类型是最优选择:

test_df['Time_of_possession_delta'] = pd.to_timedelta(test_df['Time_of_possession'])

转成Timedelta后,你可以直接执行这些实用操作:

# 计算所有记录的总控球时长
total_possession = test_df['Time_of_possession_delta'].sum()
# 筛选控球时长超过15分钟的记录
long_possession = test_df[test_df['Time_of_possession_delta'] > pd.to_timedelta('15:00')]

这种类型保留了时间的语义,做时间运算会灵活很多。

备注:内容来源于stack exchange,提问作者user14182282

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:25:30