Pandas将秒数列转为时分秒格式如何去除0 days前缀
实现方案
你可以根据你的秒数范围选择以下任意一种方法:
方法1:对timedelta字符串做替换,适配所有秒数小于1天的场景
直接把转换后字符串里的0 days前缀删除即可,修改后的映射代码如下:df['Time'] = df['Sec'].map(lambda row: str(datetime.timedelta(seconds=row)).replace('0 days ', ''))如果担心有空格格式差异,也可以用切割方式取时分秒部分:
df['Time'] = df['Sec'].map(lambda row: str(datetime.timedelta(seconds=row)).split(maxsplit=2)[-1])方法2:使用pandas内置时间格式化,适配秒数小于1天的场景
直接将秒数按时间单位转换为datetime类型后格式化输出,代码更简洁:import pandas as pd df['Time'] = pd.to_datetime(df['Sec'], unit='s').dt.strftime('%H:%M:%S')注意:该方法仅适用于秒数小于86400(即1天)的场景,若秒数超过1天,小时部分会自动取模24,导致结果不准
方法3:手动计算时分秒,适配所有秒数场景
如果你的秒数可能超过1天,需要把天数折算成累加的小时数,可以自定义转换函数:def sec_to_hms(sec): hours = sec // 3600 minutes = (sec % 3600) // 60 seconds = sec % 60 return f"{hours:02d}:{minutes:02d}:{seconds:02d}" df['Time'] = df['Sec'].map(sec_to_hms)该方法不管秒数多大都可以输出正确的时分秒格式,比如90000秒(25小时)会输出
25:00:00,不会出现天数前缀。
内容的提问来源于stack exchange,提问作者Roger Steinberg
相关产品推荐
相关产品推荐

