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

Python statistics求众数遇多值报错、multimode无法识别问题

问题根因
  • statistics.mode() 从设计上仅支持返回唯一众数,当数据集存在多个频次并列最高的值时,会直接抛出StatisticsError: no unique mode; found X equally common values,属于函数预期行为,和数据规模无关。
  • statistics.multimode() 无法被识别的原因是:该方法是Python 3.8及以上版本才内置到statistics标准库的,运行环境的Python版本低于3.8时,解释器找不到该方法定义,就会触发名称类报错。
实现方案

方案1:使用pandas原生接口(推荐,适配你当前的数据流,无版本依赖、性能适合大规模数据)

你当前处理的是pandas的Series对象,不需要依赖statistics模块,直接用pandas内置的频次统计方法即可一次性拿到所有众数:

import pandas as pd

df = pd.read_csv('Area(1).txt', delimiter='\t')
df4 = df.iloc[0:528, 5]

# 统计列内每个值的出现频次
value_counts = df4.value_counts()
# 提取最高频次值
max_count = value_counts.max()
# 筛选所有频次等于最高值的结果,即为全部众数
multi_modes = value_counts[value_counts == max_count].index.tolist()

print(multi_modes)

方案2:升级Python版本后调用官方multimode

如果要使用statistics内置的多众数方法,将本地Python环境升级到3.8或更高版本后,可直接按如下方式调用:

import pandas as pd
import statistics 

df=pd.read_csv('Area(1).txt',delimiter='\t')
df4=df.iloc[0:528,5]
multi_modes = statistics.multimode(df4)
print(multi_modes)

方案3:低版本Python手动实现多众数逻辑

如果暂时无法升级Python版本,可以借助collections模块的计数能力手动实现等价逻辑,效果和官方multimode完全一致:

import pandas as pd
from collections import Counter

df=pd.read_csv('Area(1).txt',delimiter='\t')
df4=df.iloc[0:528,5]

count_map = Counter(df4.tolist())
max_freq = max(count_map.values())
multi_modes = [val for val, freq in count_map.items() if freq == max_freq]
print(multi_modes)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:21:22