Python时间数据类型转换:将时分秒字符串转为标准格式或总秒数
时间字符串格式转换解决方案
针对你需要将列中类似30m 32s的时间字符串转换为友好格式的需求,以下是具体实现方案:
一、转换为MM:SS格式
如果你的数据是Pandas DataFrame中的列,可以通过正则提取时间单位数值,再格式化拼接:
import pandas as pd # 示例数据(包含多种时间格式情况) df = pd.DataFrame({'time': ['30m 32s', '1h 5m 10s', '2m', '45s', '2h 30s']}) # 提取小时、分钟、秒,缺失的单位补0 time_parts = df['time'].str.extract(r'(?:(\d+)h\s*)?(?:(\d+)m\s*)?(\d+)s?') \ .fillna(0) \ .astype(int) # 计算总分钟数(小时转分钟),然后格式化为MM:SS df['mm_ss'] = time_parts.apply(lambda x: f"{x[0]*60 + x[1]:02d}:{x[2]:02d}", axis=1)
执行后mm_ss列会得到:30:32、65:10、02:00、00:45、120:30这样的结果,确保分钟和秒都是两位数字。
二、转换为总秒数
同样用正则提取各单位数值,换算成总秒数:
# 基于上面的time_parts计算总秒数 df['total_seconds'] = time_parts.apply(lambda x: x[0]*3600 + x[1]*60 + x[2], axis=1)
执行后total_seconds列会得到对应数值:1832、3910、120、45、7230。
注意事项
- 如果你的时间字符串只有分钟和秒(没有小时),可以简化正则为
r'(\d+)m\s*(\d+)s',但上面的正则兼容带小时的情况。 - 确保列中没有格式错误的字符串,若有可以先通过
str.contains过滤或处理异常值。
内容的提问来源于stack exchange,提问作者Alvaroz27
相关产品推荐
相关产品推荐

