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

如何阻止Calamine读取Excel文件时自动推断数据类型?

解决Calamine读取Excel时自动推断数据类型导致数字带.0的问题

Calamine的to_python()方法会自动推断Excel单元格的数据类型,导致原本的整数被解析为带.0后缀的浮点数。由于你的pandas版本不支持Calamine引擎,无法直接用dtype=str参数,你可以通过手动处理读取后的行数据来解决这个问题:

方法一:全局转换所有数据为字符串(处理整数型浮点数)

遍历每一行的每个元素,将整数型浮点数转为整数后再转字符串,其他类型直接转字符串:

from calamine import CalamineWorkbook
import pandas as pd

fp = "你的Excel文件路径.xlsx"
wb = CalamineWorkbook.from_path(fp)
sheet = wb.get_sheet_by_name(wb.sheet_names[0])

# 读取所有行数据
all_rows = sheet.to_python()
# 分离表头和数据行(如果你的文件有表头)
header = all_rows[0]
data_rows = all_rows[1:]

processed_rows = []
for row in data_rows:
    processed_row = []
    for item in row:
        # 判断是否是整数型浮点数(如4200000000.0)
        if isinstance(item, float) and item.is_integer():
            processed_row.append(str(int(item)))
        else:
            # 其他类型直接转为字符串
            processed_row.append(str(item))
    processed_rows.append(processed_row)

# 转换为DataFrame
df = pd.DataFrame(processed_rows, columns=header)
print(df[col])  # 输出示例:4200000000

方法二:针对性处理指定列(提升效率)

如果你明确知道哪些列需要处理,可以只转换目标列,避免遍历所有元素:

from calamine import CalamineWorkbook
import pandas as pd

fp = "你的Excel文件路径.xlsx"
wb = CalamineWorkbook.from_path(fp)
sheet = wb.get_sheet_by_name(wb.sheet_names[0])

all_rows = sheet.to_python()
header = all_rows[0]
data_rows = all_rows[1:]

# 指定需要处理的列索引(比如第0列和第2列,根据实际情况调整)
target_col_indices = [0, 2]

processed_rows = []
for row in data_rows:
    processed_row = list(row)
    for idx in target_col_indices:
        item = processed_row[idx]
        if isinstance(item, float) and item.is_integer():
            processed_row[idx] = str(int(item))
        else:
            processed_row[idx] = str(item)
    processed_rows.append(processed_row)

df = pd.DataFrame(processed_rows, columns=header)

原理说明

Calamine的to_python()会根据Excel单元格的存储类型自动映射为Python类型:如果单元格是数值类型(即使显示为整数),会被解析为浮点数。通过手动检查并转换这些整数型浮点数,就能得到和pandas指定dtype=str完全一致的字符串格式值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:46:05