在Pandas中将秒转换为HH:MM:SS格式(天数并入小时)
将Pandas DataFrame的秒数字段转换为包含合并天数的HH:MM:SS格式
给定包含秒数字段的Pandas DataFrame:
import pandas as pd df = pd.DataFrame({'seconds': [122400, 43245, 234143, 53245, 394911]})
需要将seconds字段转换为HH:MM:SS格式,其中天数部分直接并入小时数(例如1天10小时需显示为34:00:00),最终得到目标结果。
解决方案
方法1:手动计算时分秒
通过数学运算直接拆分总秒数,将天数对应的小时数直接累加到小时字段中:
# 计算总小时数(包含天数转换的部分) df['hours'] = df['seconds'] // 3600 # 计算剩余秒数,拆分分钟和秒 remaining_sec = df['seconds'] % 3600 df['minutes'] = remaining_sec // 60 df['seconds_final'] = remaining_sec % 60 # 格式化字符串,确保分钟和秒为两位数 df['time'] = df.apply(lambda row: f"{row['hours']}:{row['minutes']:02d}:{row['seconds_final']:02d}", axis=1) # 保留需要的列 df = df[['seconds', 'time']]
运行后输出结果:
seconds time 0 122400 34:00:00 1 43245 12:00:45 2 234143 65:02:23 3 53245 14:47:25 4 394911 109:41:51
方法2:利用Pandas Timedelta组件
借助pd.to_timedelta转换秒数,再通过dt.components提取分钟和秒,总小时数由总秒数计算得到:
# 转换为timedelta对象 df['timedelta'] = pd.to_timedelta(df['seconds'], unit='s') # 计算总小时数,提取分钟和秒 df['hours'] = df['timedelta'].dt.total_seconds() // 3600 df['minutes'] = df['timedelta'].dt.components['minutes'] df['seconds_final'] = df['timedelta'].dt.components['seconds'] # 格式化时间字符串 df['time'] = df.apply(lambda row: f"{int(row['hours'])}:{row['minutes']:02d}:{row['seconds_final']:02d}", axis=1) # 清理列 df = df[['seconds', 'time']]
该方法同样能得到符合要求的结果,利用Pandas内置的时间处理功能简化计算步骤。
内容的提问来源于stack exchange,提问作者SasLNat
相关产品推荐
相关产品推荐

