如何使用Python计算Excel中B列或C列的时间平均值?
用Python计算Excel时间列的平均值及时间差平均值
前置准备
先安装所需依赖库:
pip install pandas openpyxl
完整实现代码
以下是补充了平均值计算的完整代码,基于你已有的读取Excel、转换时间列的逻辑:
import pandas as pd # 读取目标Excel文件(替换为你的文件名) df = pd.read_excel('your_data.xlsx') # 清理缺失值(避免计算时出错,可选) df = df.dropna(subset=['B', 'C']) # 将B、C列的时间字符串转为datetime类型 # 注意:format参数需匹配你的时间格式,比如带日期用'%Y-%m-%d %H:%M:%S' df['B'] = pd.to_datetime(df['B'], format='%H:%M:%S') df['C'] = pd.to_datetime(df['C'], format='%H:%M:%S') # --- 计算单列时间平均值 --- # B列时间平均值(转成时分秒格式输出) b_col_avg = df['B'].mean() print(f"B列时间平均值:{b_col_avg.strftime('%H:%M:%S')}") # C列时间平均值 c_col_avg = df['C'].mean() print(f"C列时间平均值:{c_col_avg.strftime('%H:%M:%S')}") # --- 计算B、C列时间差的平均值 --- # 先计算每行的时间差(单位:秒) df['time_diff_seconds'] = (df['C'] - df['B']).dt.total_seconds() # 求时间差的平均值 avg_diff_seconds = df['time_diff_seconds'].mean() # 转成时分秒格式输出 hours = int(avg_diff_seconds // 3600) minutes = int((avg_diff_seconds % 3600) // 60) seconds = int(avg_diff_seconds % 60) print(f"B与C列时间差的平均值:{hours:02d}:{minutes:02d}:{seconds:02d}") # 也可以直接以分钟为单位输出 print(f"B与C列时间差的平均值(分钟):{avg_diff_seconds / 60:.2f}")
关键说明
- 时间格式匹配:
pd.to_datetime的format参数必须和Excel中时间字符串的格式完全一致,比如:- 纯时分秒:
'%H:%M:%S' - 带日期的时间:
'%Y-%m-%d %H:%M:%S' - 如果是Excel内置的时间格式(非字符串),可以省略
format参数,pandas会自动识别
- 纯时分秒:
- 缺失值处理:如果Excel中有空值,用
dropna()删除对应行,或者用fillna()填充合理值,否则均值计算会报错 - 时间差单位:可以根据需求将时间差转为秒、分钟、小时等,只需调整
total_seconds()后的换算逻辑
内容的提问来源于stack exchange,提问作者Ade Saputra
相关产品推荐
相关产品推荐

