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
相关产品推荐
相关产品推荐

