如何计算时分秒格式时间字符串的均值?df[].mean()方法失效求助
解决时分秒字符串列求均值的方法
直接用df[列名].mean()无效是因为列的数据类型是字符串,pandas没法直接对字符串做均值计算,得先把字符串转为**时间差(timedelta)**类型,再计算均值,最后按需转回字符串格式。
具体步骤:
转换为timedelta类型
使用pd.to_timedelta()方法将字符串列转为timedelta类型,这个方法能直接识别时分秒带微秒的格式:df['time_col'] = pd.to_timedelta(df['time_col'])计算均值
转换后就可以正常用mean()方法计算均值了:mean_time = df['time_col'].mean()转回时分秒字符串(可选)
如果需要把结果转回类似原格式的字符串,可通过两种方式处理:# 方法1:借助Timestamp格式化 mean_str = (pd.Timestamp('1970-01-01') + mean_time).strftime('%H:%M:%S.%f') # 方法2:手动拆分计算格式 total_seconds = mean_time.total_seconds() hours = int(total_seconds // 3600) minutes = int((total_seconds % 3600) // 60) seconds = total_seconds % 60 mean_str = f"{hours}:{minutes:02d}:{seconds:.6f}"
完整示例代码
import pandas as pd # 模拟数据 data = {'time': ['0:00:34.805936', '0:01:17.946625', '0:01:41.294841']} df = pd.DataFrame(data) # 转换为timedelta df['time'] = pd.to_timedelta(df['time']) # 计算均值 mean_timedelta = df['time'].mean() # 转回字符串格式 mean_str = (pd.Timestamp('1970-01-01') + mean_timedelta).strftime('%H:%M:%S.%f') print(mean_str) # 输出示例:0:01:04.682467
注意点
- 只要是合法的时分秒/天数格式,
pd.to_timedelta()都能处理,无需担心格式细微差异(比如无秒数、小时数大于24)。 - 计算得到的
mean_time是Timedelta对象,可直接用于后续时间运算,不一定非要转回字符串。
内容的提问来源于stack exchange,提问作者Шапагат Аман
相关产品推荐
相关产品推荐

