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

使用pandas read_excel读取含文本Excel时如何定义浮点精度?

问题描述

本人刚接触Python(有MATLAB和工程背景),接手的Excel文件包含表头区域和下方的数据区域,数据区包含数字、日期(对我不重要)和字符串。编写代码解析这些文件及工作表,转换为DataFrame以便后处理(类似MATLAB)。

使用pd.read_excel读取时,部分千分位、万分位、十万分位量级的小数值被读取为0整数而非浮点数。尝试过astype、dtype等转换方法,要么完全丢失字符串(需要用这些字符串定位解析逻辑),要么丢失问题列中的字符串,其他方法直接报错。

已确认Excel中的数据正常,无自身精度问题。需求是:在不破坏工作表中字符串的前提下,定义特定单元格或所有数字的浮点精度;小数值的单元格位置因工作表而异,硬编码位置或手动编辑Excel均不可行,需要优雅的解决方案。

编辑补充:经排查发现是引用了旧文件,更新文件路径后read_excel可正常读取预期值。


示例数据(Sheet.xlsx)
header 1header 2header 3
text120.0001
NaN0.001text
texttext11

测试代码
import pandas as pd
directory = r'C:\Data'
sheet = 'sheet1.xlsx'
importdata = pd.read_excel(directory, sheet_name=sheet, header=None)
print(importdata.loc[2,1]) # 当前输出:0
print(importdata.loc[1,1]) # 期望更高精度,如12.00000等,当前输出:12

解决方案思路(针对排除文件路径错误后的潜在问题)

如果排除文件路径引用错误的情况,若仍出现精度读取问题,可尝试以下方案:

  • 读取时指定dtype=object保留原始数据类型,之后针对数字单元格单独处理精度:
    import pandas as pd
    
    def convert_to_precise_float(val):
        try:
            # 尝试转换为浮点数,保留6位小数
            return round(float(val), 6) if not pd.isna(val) else val
        except (ValueError, TypeError):
            # 非数字类型直接返回
            return val
    
    directory = r'C:\Data'
    sheet = 'sheet1.xlsx'
    # 以object类型读取,保留所有原始内容
    importdata = pd.read_excel(directory, sheet_name=sheet, header=None, dtype=object)
    # 对每个单元格应用转换函数
    importdata = importdata.applymap(convert_to_precise_float)
    
    print(importdata.loc[2,1]) # 输出0.001
    print(importdata.loc[1,1]) # 输出12.0
    
  • 若仅需统一显示格式而非修改数据本身,可设置DataFrame的显示精度:
    pd.set_option('display.float_format', '{:.6f}'.format)
    print(importdata.loc[1,1]) # 显示为12.000000
    

内容的提问来源于stack exchange,提问作者squeaky-engineer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 15:52:43