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

Pandas Series.value_counts()异常:相同值重复统计的原因排查

为什么Pandas value_counts()里相同浮点数会重复出现?

兄弟,这事儿我熟!你看到的两个-0.010000其实根本不是同一个值——问题出在浮点数的二进制存储精度上。

背后的原因

计算机里的浮点数(比如Python的float)是用二进制来存储的,很多十进制小数没法被精确表示,只能近似。你打印出来的-0.010000只是Pandas格式化后的显示结果,实际上这两个值可能是-0.010000000000000002和-0.009999999999999998这种极其接近的数,肉眼看不出来,但Pandas的value_counts()会把它们当成完全不同的两个值统计。

验证方法

你可以先打印这些值的完整精确表示,看看差异:

# 查看每个值的20位小数精度,直观看到微小差异
print(df[my_data].apply(lambda x: format(x, '.20f')))

跑这段代码后,你就能清楚看到那两个“看起来一样的-0.01”实际的区别了。

解决办法

针对这种情况,有几种简单实用的处理方式:

  • 四舍五入到固定小数位:这是最常用的方案,把数值统一保留足够的小数位,消除微小误差:
    # 比如保留6位小数,可根据你的数据精度需求调整
    unique = df[my_data].round(6).value_counts()
    print(unique)
    
  • 使用Decimal类型精确处理:如果需要更高精度的控制,可以把数据转换为decimal.Decimal类型,从根源避免浮点存储误差:
    from decimal import Decimal
    df['my_data_decimal'] = df[my_data].apply(lambda x: Decimal(str(x)))
    unique = df['my_data_decimal'].value_counts()
    print(unique)
    

这种浮点数精度问题在数据分析里太常见了,尤其是处理从外部导入的数值数据时,一定要多留意!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:49:06