导读:本期聚焦于小伙伴创作的《Python怎么找出最常出现的值_mode()众数计算与频次统计》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Python怎么找出最常出现的值_mode()众数计算与频次统计》有用,将其分享出去将是对创作者最好的鼓励。

在Python的数据处理场景中,找出一组数据里最常出现的值也就是众数,是很多业务需求里的基础操作,比如统计用户最常访问的页面、商品销量最高的品类等。我们可以通过内置模块提供的工具快速实现这个需求,也有更灵活的自定义统计方案。

Python怎么找出最常出现的值_mode()众数计算与频次统计

使用statistics模块的mode函数计算众数

Python标准库的statistics模块提供了专门的mode函数,可以直接返回可迭代对象中最常出现的值,使用起来非常简单。不过这个函数有一个限制,如果数据中有多个值出现的频次相同且都是最高,它会直接抛出StatisticsError异常。

首先看基础的使用示例,统计列表中出现的众数:

from statistics import mode, StatisticsError

# 定义测试数据,3出现了3次,是最常出现的值
data_list = [1, 2, 3, 3, 3, 4, 5, 5]
try:
    result = mode(data_list)
    print(f"列表的众数为:{result}")
except StatisticsError as e:
    print(f"计算众数失败:{e}")

如果数据中存在多个众数,比如下面的例子里2和3都出现了2次,是最高的频次:

from statistics import mode, StatisticsError

multi_mode_data = [1, 2, 2, 3, 3, 4]
try:
    result = mode(multi_mode_data)
    print(f"列表的众数为:{result}")
except StatisticsError as e:
    # 这里会捕获到异常,提示存在多个众数
    print(f"计算众数失败:{e}")

使用collections的Counter实现频次统计

如果需要更灵活的频次统计,比如获取所有出现的值的频次,或者处理多个众数的场景,可以使用collections模块里的Counter类。Counter可以统计可迭代对象中每个元素的出现次数,返回一个类似字典的计数器对象。

基础频次统计

先实现统计所有元素的出现频次,并且找出最高的频次对应的值:

from collections import Counter

data = [1, 2, 3, 3, 3, 4, 5, 5, 5]
# 创建Counter对象,统计每个元素的出现次数
counter_obj = Counter(data)
print(f"所有元素的频次统计:{counter_obj}")

# 找出出现次数最多的值,most_common返回的是列表,元素是(值, 频次)的元组
# 参数1表示只返回频次最高的1个
top_1 = counter_obj.most_common(1)
print(f"出现次数最多的值和频次:{top_1}")
print(f"最常出现的值为:{top_1[0][0]},出现了{top_1[0][1]}次")

处理多个众数的场景

当数据存在多个众数时,我们可以通过Counter的统计结果筛选出所有频次等于最高频次的值:

from collections import Counter

multi_mode_data = [1, 2, 2, 3, 3, 4]
counter_obj = Counter(multi_mode_data)
# 获取最高的频次
max_count = max(counter_obj.values())
# 筛选出所有频次等于最高频次的值
all_modes = [item for item, count in counter_obj.items() if count == max_count]
print(f"所有众数为:{all_modes}")
print(f"最高频次为:{max_count}")

两种方法的适用场景对比

我们可以通过下面的表格对比两种方法的差异,方便选择适合自己场景的方案:

方案优势劣势适用场景
statistics.mode代码简洁,一行即可实现多个众数时会抛异常,无法获取全部频次信息确定数据只有一个众数,只需要快速获取结果的场景
collections.Counter可获取全部频次,支持多个众数,灵活度高代码相对多几行,需要额外处理筛选逻辑需要统计全部频次、可能存在多个众数、需要自定义统计规则的场景

注意事项

  • statistics.mode函数要求传入的可迭代对象不能为空,否则会抛出StatisticsError异常,使用前最好先判断数据是否为空。
  • Counter的most_common方法如果不传参数,会返回所有元素的频次排序结果,数据量大的时候要注意性能问题。
  • 如果统计的是字符串、元组等可哈希类型的数据,Counter都可以正常统计,但是列表、字典等不可哈希类型不能作为Counter的统计元素。

除了上述两种标准库的方法,我们也可以通过自定义字典手动实现频次统计,逻辑和Counter的实现类似,但是Counter是底层优化过的实现,性能会更好,优先推荐使用标准库的方案。

Pythonmode众数频次统计collections修改时间:2026-07-02 21:03:33

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。