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
相关产品推荐
相关产品推荐

