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

pandas read_excel读取Excel货币格式单元格数值被四舍五入如何解决

问题原因

用pandasread_excel方法读取设置了货币格式的Excel列时,默认读取逻辑会受单元格的显示格式配置影响,读取到的是格式化后的展示值,而非单元格存储的全精度原始数值,因此会出现小数位截断、数值四舍五入和原始值不符的问题。

可行解决方案

按优先级尝试以下方案即可:

  • 优先给read_excel传入float_precision='round_trip'参数,强制读取时保留浮点数全精度,不做格式化截断,代码如下:
import pandas as pd
p = pd.read_excel('aa.xlsx', sheet_name=1, float_precision='round_trip')
print(p.iloc[:,5])
  • 如果上述参数在你当前的pandas版本中不生效,显式指定openpyxl为读取引擎,同时关闭自动浮点转换逻辑:
import pandas as pd
p = pd.read_excel('aa.xlsx', sheet_name=1, engine='openpyxl', convert_float=False)
print(p.iloc[:,5])
  • 前两种方案都无效的话,直接通过openpyxl加载工作簿手动提取单元格原始值再转为DataFrame,这种方式完全绕过pandas的自动类型/格式推断,能100%拿到单元格存储的底层数值,不受任何显示格式影响:
import pandas as pd
from openpyxl import load_workbook

wb = load_workbook('aa.xlsx', data_only=True)
ws = wb[wb.sheetnames[1]] # 对应原代码中sheet_name=1,即取第二个工作表
all_rows = list(ws.values)
p = pd.DataFrame(all_rows[1:], columns=all_rows[0])
print(p.iloc[:,5])

补充说明:如果数值读取正确,但打印输出时仍然显示截断的小数,这是pandas默认打印精度设置的问题,和读取到的数值本身无关,执行pd.set_option('display.float_format', lambda x: '%.6f' % x)调整打印显示的小数位数即可,实际计算时用的是完整精度的原始值。

内容的提问来源于stack exchange,提问作者Heavy Load

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:24:12