如何基于格式差异优化pandas时长列转总秒数的实现?
解决方案
直接通过判断时间字符串的冒号数量或者正则匹配区分两种格式,统一转换后批量处理,无需拆分索引区间:
方法一:基于冒号数量判断
利用字符串里的冒号数量区分格式:只有1个冒号的是mm:ss.ms,需补00:前缀;有2个冒号的是h:mm:ss.ms,直接保留原格式。代码如下:
# 标记出包含小时的行(冒号数量为2) has_hour = filt_data["Finish"].str.count(':') == 2 # 统一生成合法的timedelta字符串:带小时的保留原串,不带的补00:前缀 timedelta_str = filt_data["Finish"].where(has_hour, '00:' + filt_data["Finish"]) # 批量转换为总秒数 filt_data["F"] = pd.to_timedelta(timedelta_str).dt.total_seconds()
方法二:正则替换
用正则匹配不含小时的时间格式,自动补上前缀:
# 正则匹配开头为「数字:数字.数字」的格式,替换为00:前缀 timedelta_str = filt_data["Finish"].str.replace(r'^(\d+:\d+\.\d+)$', r'00:\1', regex=True) # 批量转换为总秒数 filt_data["F"] = pd.to_timedelta(timedelta_str).dt.total_seconds()
两种方法都能一次性完成转换,不需要拆分生成F1、F2再合并,效率更高且代码更简洁。
内容的提问来源于stack exchange,提问作者Hansson
相关产品推荐
相关产品推荐

