如何给pandas DataFrame中仅含时分的时间列补全秒数转为HH:MM:SS格式
问题原因
- 版本1失效原因:
pd.to_timedelta的第二个入参为时间单位参数,你错误传入了整列df['Attended Time']作为单位值,语法逻辑不符合函数要求,因此无法完成转换。 - 版本2出现
0 days前缀原因:pd.to_timedelta返回值为timedelta64时间差类型,pandas对该类型的默认展示规则会携带天数标识,即使天数为0也会显示0 days前缀,属于类型的正常格式化输出,并非数据错误。
解决方案
根据你的使用场景选择对应方案:
场景1:仅需要输出HH:MM:SS格式字符串,无需后续时间运算
直接用字符串处理即可,逻辑简单性能高,不会出现多余前缀:
# 适用所有原始值均为HH:MM格式的场景 df['Attended Time'] = df['Attended Time'].str.strip() + ':00' # 兼容混合格式(部分值已有秒数)的场景 df['Attended Time'] = df['Attended Time'].apply( lambda x: f"{x}:00" if x.count(':') == 1 else x )
场景2:需要保留时间类型做后续运算
先转换为timedelta类型完成计算,输出展示时再做字符串格式化移除前缀:
# 转换为timedelta类型用于时间运算 df['Attended Time'] = pd.to_timedelta(df['Attended Time']) # 输出时转换为HH:MM:SS字符串格式 df['Attended Time'] = df['Attended Time'].astype(str).str.split().str[-1]
内容的提问来源于stack exchange,提问作者Mizanur Choudhury
相关产品推荐
相关产品推荐

