如何解决pandas转换DataFrame中多格式YouTube视频时长为分钟的报错问题
错误原因
你指定了固定格式%H:%M:%S调用pd.to_datetime,但你的时长字段存在两种格式:小时:分钟:秒(三段)和分钟:秒(两段),两段的时长无法匹配三段的格式规则,因此抛出报错。
解决方案
推荐两种适配多格式时长的处理方式:
方法1:使用pd.to_timedelta自动识别(更简便)
pd.to_timedelta是pandas专门用于处理时长类型的工具,原生支持多种分段时长格式,不需要手动对齐格式:
import pandas as pd # 先去除字段前后多余空格,再转成timedelta类型 data['length_timedelta'] = pd.to_timedelta(data['length'].str.strip()) # 按总秒数换算为分钟,可按需保留小数位数 data['length_minutes'] = data['length_timedelta'].dt.total_seconds() / 60
方法2:自定义函数分割计算(更灵活可控)
如果后续需要自定义异常值处理规则,可以手动分割时长字符串按位计算:
def time_to_minutes(time_str): # 清除空格后按冒号拆分转成数字 time_parts = list(map(int, time_str.strip().split(':'))) if len(time_parts) == 3: # 小时:分钟:秒 格式 return time_parts[0] * 60 + time_parts[1] + time_parts[2] / 60 elif len(time_parts) == 2: # 分钟:秒 格式 return time_parts[0] + time_parts[1] / 60 # 可按需补充只有秒、只有分钟等其他格式的处理逻辑 return 0 data['length_minutes'] = data['length'].apply(time_to_minutes)
转换效果验证
对你给出的原始样例转换后结果如下:
| 原始时长 | 转换为分钟(保留两位小数) |
|---|---|
| 4:26:00 | 266.00 |
| 1:02:23 | 62.38 |
| 9:31 | 9.52 |
| 1:21 | 1.35 |
内容的提问来源于stack exchange,提问作者Musebe Ivan
相关产品推荐
相关产品推荐

