You need to enable JavaScript to run this app. pandas sqldf计算fail_perc时除法返回全0的问题解决
优惠活动
大模型
产品
解决方案
定价
更多

pandas sqldf计算fail_perc时除法返回全0的问题解决

sqldf 查询除法结果全为0 解决方案

问题根源

pandas 的 sqldf 底层依托 SQLite 引擎执行查询逻辑,SQLite 对两个整数类型值的除法运算默认走整数截断规则,不会自动保留小数部分。
只要分子数值小于分母,整数除法会直接把结果截断为0——哪怕单独取分子、分母的数值都准确,只要触发整数除法的判定,后续乘100得到的结果也会全程为0,和你遇到的现象完全吻合。这个坑是SQLite的规则特性导致的,换到其他支持隐式浮点转换的数据库引擎上不会出现这类问题。

可直接落地的修复方法

不需要改动原有查询的表结构、列选择逻辑,只需要调整 CASE 语句内的除法计算逻辑,打破整数运算的类型链路即可,两种写法任选其一:

  • 写法1:在分子侧乘浮点常数1.0,强制触发浮点运算
    调整后的完整可运行代码为:
    ps.sqldf("select  [MCA Governance Entity], [Assessment Unit]  ,fail_cnt  ,pass_cnt ,na_cnt,"
             "case when fail_cnt <>0 then pass_cnt * 1.0 / (pass_cnt + fail_cnt)*100  else  0 end fail_perc from df7",locals())
    
  • 写法2:用SQLite内置类型转换函数,把分子显式转为实数类型
    调整后的 CASE 计算片段为:
    case when fail_cnt <>0 then CAST(pass_cnt AS REAL) / (pass_cnt + fail_cnt)*100  else  0 end fail_perc
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 02:15:03