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

如何阻止pandas读取Excel时将6E5类文本识别为数值?

解决pandas读取Excel时将"6E5"识别为科学计数法数值的问题

我在开发读取96孔板细胞培养相关Excel多工作表并转为DataFrame的程序时,碰到个棘手问题:data1列里A2孔的"6E5"被pandas当成科学计数法识别成了6000000000.0,而不是保留原本的文本格式。试过把Excel列设为文本格式、检测到标题是"barcode"就强制按字符串加载,都没用;但把工作表存成CSV再读取就正常,说明问题出在pandas的Excel读取逻辑上。

期望的正确数据格式应该是这样:

Welldata1data2
A16B40.145
A26E50.132
A36C90.015

试试这些解决办法:

  • 直接指定列的字符串类型
    在pd.read_excel()里用dtype参数明确指定目标列的类型为字符串,不管是列名还是列位置都能操作:

    # 按列名指定data1为字符串
    df = pd.read_excel("your_file.xlsx", sheet_name="sheet1", dtype={"data1": str})
    # 按列位置指定(假设data1是第2列,索引从0开始)
    df = pd.read_excel("your_file.xlsx", sheet_name="sheet1", dtype={1: str})
    
  • 用converters参数做强制转换
    给特定列设置转换器函数,确保读取时直接转成字符串:

    def to_str(value):
        return str(value)
    
    df = pd.read_excel("your_file.xlsx", sheet_name="sheet1", converters={"data1": to_str})
    
  • 配合openpyxl引擎的data_only参数
    如果用openpyxl作为读取引擎,加上data_only=False能读取单元格的原始内容,避免被解析成计算后的科学计数法数值,再配合dtype指定:

    df = pd.read_excel("your_file.xlsx", sheet_name="sheet1", engine="openpyxl", data_only=False, dtype={"data1": str})
    
  • 读取后针对性修正
    要是前面的方法还有漏网之鱼,读取后可以对data1列做批量修正,把误识别的数值转回去:

    # 针对6E5被识别成6000000000.0的情况修正
    df["data1"] = df["data1"].apply(lambda x: "6E5" if isinstance(x, float) and x == 6000000000.0 else x)
    # 更通用的处理:如果是浮点数且符合xE5的形式,转回文本
    df["data1"] = df["data1"].apply(
        lambda x: f"{int(x/100000)}E5" if isinstance(x, float) and x % 100000 == 0 else x
    )
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 05:16:19