如何在Python中复现Excel的平均值计算及四舍五入逻辑
差异原因及解决方法
首先排查列选取范围的问题
pandas的iloc切片遵循左闭右开规则,如果你Excel中选取的是第133到191列(包含首尾两列),Python中需要写成df.iloc[: , 133:192]才能覆盖相同的列范围,这是最容易导致统计结果偏差的原因。核对有效数值统计逻辑
Excel的AVERAGE函数和pandas的mean方法默认都会自动跳过NA值计算,逻辑本身一致,你可以通过手动计算总和、有效数个数确认是否对齐:
# 计算选中列的逐行总和(自动跳过NA) row_sum = cols.sum(axis=1) # 计算选中列的逐行非NA数值个数 row_count = cols.count(axis=1) # 手动计算平均值 manual_mean = row_sum / row_count
把计算得到的总和、个数和Excel中用SUM、COUNT函数得到的结果做对比,就能确认是否是数值选取范围的问题。
如果是数据中存在字符串格式的'NA'而非pandas识别的np.nan,需要先替换成空值再计算:
cols = cols.replace('NA', np.nan).astype(float)
- 对齐四舍五入规则
如果平均值计算已经一致,但四舍五入结果不同,是因为Python默认采用银行家舍入法(小数为0.5时取最近偶数),而Excel的ROUND函数采用的是逢五进一的规则,可以用自定义函数实现和Excel一致的舍入逻辑:
def excel_round(x, decimals=0): multiplier = 10 ** decimals return int(x * multiplier + 0.5) / multiplier # 应用到目标列 df['rounded_score'] = df['score'].apply(excel_round)
内容的提问来源于stack exchange,提问作者Anakin Skywalker
相关产品推荐
相关产品推荐

