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

如何用Pandas.read_excel或xlwings读取Excel显示的精确数值

解决Excel数据读取精度丢失问题

方法1:使用decimal类型读取,保留精确值

Pandas可以配合decimal模块,读取时将数值转为Decimal类型,避免浮点数精度损耗。需要用converters参数指定列的转换函数:

import pandas as pd
from decimal import Decimal

def convert_to_decimal(value):
    try:
        return Decimal(str(value))
    except:
        return value

df_input = pd.read_excel(excel_path, sheet_name, converters={'Column E': convert_to_decimal})

读取后Column E的数值会以Decimal类型存储,完全保留原始精度。

方法2:读取Excel单元格的显示文本(推荐)

如果要完全获取Excel界面显示的数值,可以用openpyxl直接读取单元格的display_value属性,再转为DataFrame:

import pandas as pd
from openpyxl import load_workbook

wb = load_workbook(excel_path)
ws = wb[sheet_name]

# 提取表头和数据
header = [cell.value for cell in ws[1]]
data = []
for row in ws.iter_rows(min_row=2):
    row_data = []
    for cell in row:
        # 读取显示的文本,再尝试转成Decimal保留精度
        val = cell.display_value
        try:
            row_data.append(Decimal(val))
        except:
            row_data.append(val)
    data.append(row_data)

df_input = pd.DataFrame(data, columns=header)

这个方法直接获取Excel显示的内容,完全匹配你看到的数值。

方法3:xlwings读取显示文本

如果你习惯用xlwings,可以读取单元格的text属性,再构建DataFrame:

import pandas as pd
import xlwings as xw

wb = xw.Book(excel_path)
ws = wb.sheets[sheet_name]

# 获取表头和数据区域
header = [cell.value for cell in ws.range('1:1') if cell.value is not None]
used_range = ws.used_range
data = []
for row in used_range.rows[1:]:
    row_data = []
    for cell in row:
        val = cell.text
        try:
            row_data.append(Decimal(val))
        except:
            row_data.append(val)
    data.append(row_data)

df_input = pd.DataFrame(data, columns=header)
wb.close()

补充说明

浮点数精度问题源于计算机二进制存储的局限性,Excel里显示的数值是格式化后的结果,底层存储的可能是近似值。上述方法要么读取底层值并转为高精度的Decimal类型,要么直接读取界面显示的文本,都能解决你的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:01:42