Pandas转换Float64为字符串时丢失小数精度的问题排查
Pandas转换Float64为字符串时精度丢失问题的排查与结论
我处理一份包含浮点数列的Excel文件时,遇到了如下问题:用Pandas将Float64类型的值转为字符串时,部分值出现小数精度丢失,导致后续检查SOURCE_VALUES是否存在超过两位小数的逻辑出现误报。
操作流程
- 读取Excel数据:
df = pd.read_excel(io=_file, sheet_name="History", header=4, skiprows=[5, 6, 7]).fillna("")
- 将浮点数列转为字符串:
test = df.assign(STRING_VALUES=df.SOURCE_VALUES.map(lambda x: str(x)))
- 检查Pandas小数格式配置:
执行pd.get_option("styler.format.decimal"),返回结果为,,符合巴西(与欧洲一致)的数字格式规范——千位分隔符为.,小数分隔符为,。
问题根源排查
最初怀疑是Pandas的转换逻辑导致精度丢失,但后续获取到原始XML源文件后发现:问题出在Excel文件本身,是Excel自动对数值应用了浮点格式掩码,导致读取到Pandas中的值并非原始精确值,而非Pandas的转换问题,原始数据本身是正确的。
总结
遇到类似数据转换精度问题时,首先要关注数据来源的原始状态,不要直接误判是处理工具的问题,优先验证数据源本身是否存在格式或显示层面的偏差。
内容的提问来源于stack exchange,提问作者Bitart
相关产品推荐
相关产品推荐

