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

Python DataFrame含异常值行删除失败,求排查与解决方法

浮点数精度导致异常值删除失败的问题分析与解决

错误原因

  • 浮点数精度不匹配:你要删除的实际值是0.52892562,但代码中使用的是0.528926。浮点数在计算机中以近似方式存储,这两个值的底层存储并不完全相等,因此精确的==或!=判断无法匹配到目标行。
  • drop操作未生效:第二种方法中OG_df.drop(i)默认不会修改原DataFrame,必须添加inplace=True参数,或者将删除后的结果重新赋值给变量,否则原数据不会发生变化。

解决方法

方法1:使用容差范围进行近似匹配

通过判断值与目标值的差值是否在极小范围内,规避浮点数精度问题:

# 筛选出差值小于1e-6的行并排除
OG_df_dropped = OG_df[~(abs(OG_df['type'] - 0.5289256) < 1e-6)]
print(OG_df_dropped['type'].unique())

方法2:直接使用精确的实际值匹配

如果你明确知道异常值的精确值是0.52892562,直接用该值进行判断:

# 方法一:query筛选
OG_df_dropped = OG_df.query("type != 0.52892562")
print(OG_df_dropped['type'].unique())

# 方法二:drop修改原数据
i = OG_df[OG_df['type'] == 0.52892562].index
OG_df.drop(i, inplace=True)
print(OG_df['type'].unique())

方法3:转换为字符串进行精确匹配

将浮点数转换为固定小数位数的字符串,彻底避免精度干扰:

# 保留6位小数转为字符串
target_str = "{:.6f}".format(0.5289256)
OG_df_dropped = OG_df[OG_df['type'].apply(lambda x: "{:.6f}".format(x)) != target_str]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 17:48:12