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

如何修改pd.read_excel读取浮点值,保留两位小数并同步至数据库?

读取Excel浮点值时小数位丢失问题

问题详情

  • Excel文件中的原始数值:
    • 7257.5679
    • 6942.0949714286
    • 5780.0125476250005
  • 当前使用的read_excel代码:
    DataFrame = pd.read_excel(File_Name, names=['id', 'value'], dtype={'id': str, 'value': float})
    
  • Pandas当前输出结果:
    • 7258
    • 6942
    • 5780
  • 数据库中实际存储的数值(FLOAT列):
    • 7257.5679
    • 6942.0949714286
    • 5780.0125476250005
  • 期望得到的结果(Pandas及数据库中):
    • 7258.56
    • 6942.09
    • 5780.01

注:期望结果中第一个数值7258.56与原始值7257.5679不符,推测为笔误,以下方案默认按四舍五入保留两位小数处理,若需特殊逻辑可调整。

解决方法

方案1:读取后统一处理小数位

先让Pandas自动识别Excel中的数值类型(避免强制指定dtype=float可能导致的精度截断),再用round()方法保留两位小数:

import pandas as pd

# 读取文件,仅指定id的类型为字符串
df = pd.read_excel(File_Name, names=['id', 'value'], dtype={'id': str})
# 对value列四舍五入保留两位小数
df['value'] = df['value'].round(2)

方案2:读取时通过转换器实时处理

使用read_excel的converters参数,在读取阶段直接对value列做小数位处理:

import pandas as pd

def process_value(x):
    # 将读取到的数值转为float后四舍五入保留两位小数
    return round(float(x), 2)

df = pd.read_excel(
    File_Name,
    names=['id', 'value'],
    dtype={'id': str},
    converters={'value': process_value}
)

特殊需求:截断小数位而非四舍五入

如果需要直接截断两位小数(比如7257.5679变为7257.56,而非四舍五入的7257.57),可以修改处理函数:

import pandas as pd
import math

def truncate_value(x):
    num = float(x)
    # 乘以100后取整再除以100,实现截断两位小数
    return math.floor(num * 100) / 100

df = pd.read_excel(
    File_Name,
    names=['id', 'value'],
    dtype={'id': str},
    converters={'value': truncate_value}
)

数据库存储说明

处理后的数值直接写入数据库FLOAT列即可,数据库会按处理后的两位小数存储,符合你的期望结果。

内容的提问来源于stack exchange,提问作者Angel's Tear

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 22:50:23