You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python与Excel SUM计算结果不一致,如何实现两者结果统一?

解决Python金额求和与Excel结果不一致的问题

问题根源

浮点数加法不满足数学上的结合律,np.sum采用了优化的求和算法(如成对求和)来降低误差,但Excel的求和是按单元格顺序逐个累加,两者计算逻辑差异导致结果偏差;另外,CSV转float64时的精度损失也可能加剧差异。


解决方案

方法1:模拟Excel逐行累加逻辑(用float64)

直接复刻Excel的顺序累加方式,匹配其计算逻辑:

import pandas as pd
import numpy as np

csv_directory = r'D:\Work Documents\Apps\ACF PAS & MANUAL\DMS\Test\ACF_ID_DMSCM_01_20210131_0001.csv'

df = pd.read_csv(csv_directory)
# 转为Excel同款双精度浮点数类型
df['TransactionAmount'] = df['TransactionAmount'].astype(np.float64)

# 手动逐行累加,完全匹配Excel的求和顺序
total_amount = 0.0
for amount in df['TransactionAmount']:
    total_amount += amount

print(total_amount)

方法2:用Decimal类型精确计算(消除浮点数精度损失)

如果CSV中的金额是原始字符串格式,用Decimal读取计算可彻底避免转换精度损失:

from decimal import Decimal, getcontext
import pandas as pd

csv_directory = r'D:\Work Documents\Apps\ACF PAS & MANUAL\DMS\Test\ACF_ID_DMSCM_01_20210131_0001.csv'

# 读取时将金额列设为字符串,避免初始浮点数转换误差
df = pd.read_csv(csv_directory, dtype={'TransactionAmount': str})

# 设置精度为17位,匹配Excel双精度浮点数的有效数字范围
getcontext().prec = 17
df['TransactionAmount'] = df['TransactionAmount'].apply(Decimal)

# 逐行累加(或直接用df['TransactionAmount'].sum(),pandas对Decimal列的sum为顺序累加)
total_amount = Decimal('0')
for amount in df['TransactionAmount']:
    total_amount += amount

# 转为浮点数输出,和Excel格式一致
print(float(total_amount))

验证注意事项

  • 确认CSV中的金额数据与Excel读取的完全一致,避免Excel自动将长数字转为科学计数法或截断。
  • 若Excel显示的求和结果是四舍五入后的展示值,需通过=CELL("contents", 单元格地址)查看单元格实际存储的原始数据。

内容的提问来源于stack exchange,提问作者Allesandro Yudo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 19:22:50