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

Pandas使用read_excel读取Excel时整数转float如何保留原字符串值

问题原因

该问题本质是pandas读取Excel的自动类型推断逻辑导致的:常规格式的数值列如果存在空值,pandas会默认将整列推断为float类型(原生int类型无法存储NaN);即使没有空值,Excel数值默认按浮点数存储的规则也会被pandas识别为float。你直接用dtype或converters指定转字符串时,本质是对已经转换完成的float结果做二次转换,所以会自带.0后缀。

可行解决方案

方案1:使用openpyxl引擎的convert_float参数(最便捷)

读取时指定引擎为openpyxl,开启convert_float参数自动将无小数部分的float转成int,再转字符串就不会出现.0后缀:

import pandas as pd

df = pd.read_excel(
    r'C:\test.xlsx',
    'Sheet0',
    skiprows=1,
    engine='openpyxl',
    convert_float=True, # 自动将无小数部分的浮点数值转成int
    dtype={'目标列名': str} # 直接指定目标列转为字符串,无.0后缀
)

方案2:直接读取单元格原始文本(完全避免类型推断,适合复杂格式场景)

如果需要100%还原Excel单元格的原始内容,可以直接用openpyxl读取单元格值后构造DataFrame,完全跳过pandas的自动类型转换逻辑:

from openpyxl import load_workbook
import pandas as pd
import numpy as np

wb = load_workbook(r'C:\test.xlsx', data_only=True)
ws = wb['Sheet0']
data = []
# min_row=2对应原参数skiprows=1,跳过第一行
for row in ws.iter_rows(min_row=2, values_only=True):
    processed_row = []
    for idx, cell_val in enumerate(row):
        # 假设目标列是第3列,索引从0开始为2,可自行修改列索引
        if idx == 2:
            if isinstance(cell_val, float) and not np.isnan(cell_val) and cell_val.is_integer():
                processed_row.append(str(int(cell_val)))
            else:
                processed_row.append(str(cell_val) if cell_val is not None else '')
        else:
            processed_row.append(cell_val)
    data.append(processed_row)
# 自行替换为实际表头
df = pd.DataFrame(data, columns=['列1', '列2', '目标列', '其他列'])

方案3:读取后批量处理列(适合已读入数据不想重新加载的场景)

如果数据已经读入DataFrame,可以直接对目标列做后处理:

import numpy as np

# 方法1:针对数值类型列做转换
df['目标列'] = df['目标列'].apply(
    lambda x: str(int(x)) if isinstance(x, float) and not np.isnan(x) and x.is_integer() 
    else str(x) if x is not None else ''
)

# 方法2:针对已经转为字符串、带.0后缀的列做处理
df['目标列'] = df['目标列'].str.replace(r'\.0$', '', regex=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:24:03