Python statistics.mean() 方法(超详细)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

引言:为什么需要统计学函数?

在数据分析和编程领域,统计学是解决问题的核心工具之一。无论是计算用户行为的平均停留时长,还是分析产品销售的平均增长率,平均数(mean)都是最基础也最常用的指标。Python的statistics模块提供了mean()方法,这个方法以简洁的方式实现了数学上的平均数计算。本文将深入讲解这个方法的使用技巧、潜在陷阱和实际应用场景,帮助开发者快速掌握这一工具。


一、statistics.mean() 方法简介

1.1 基本概念:平均数是什么?

平均数是统计学中最直观的指标之一。想象一个场景:班级里有5个学生,他们的数学成绩分别是80、85、90、95、100分。平均数就是将这些数值相加后除以数量,即: [ \text{平均分} = \frac{80 + 85 + 90 + 95 + 100}{5} = 90 ] statistics.mean()方法正是通过这样的计算逻辑,将输入的数据集转化为一个代表性的数值。

1.2 方法签名与输入要求

statistics.mean(data)
  • 参数 data:必须是一个可迭代对象(如列表、元组),且其中的元素必须是数字类型(整数或浮点数)。
  • 返回值:计算后的浮点数,即使输入全是整数也会返回浮点类型。

注意:如果输入数据为空,会抛出statistics.StatisticsError异常。


二、基础用法与示例

2.1 最简单的平均数计算

import statistics

scores = [80, 85, 90, 95, 100]
average = statistics.mean(scores)
print(average)  # 输出 90.0

这里,scores列表中的5个整数被转换为浮点数进行计算,最终结果保留小数点后一位。

2.2 处理混合数据类型

如果数据中包含非数字类型,会引发错误:

mixed_data = [10, 20, "30", 40]
try:
    statistics.mean(mixed_data)
except TypeError as e:
    print(e)  # 输出:can't convert string to float: '30'

解决方法是确保所有元素可转换为数值,例如:

clean_data = [float(x) for x in mixed_data if isinstance(x, (int, float))]

2.3 异常处理:空列表的应对策略

empty_list = []
try:
    statistics.mean(empty_list)
except statistics.StatisticsError as e:
    print(e)  # 输出:mean requires at least one data point

实践中,可以通过条件判断或默认值处理这种情况:

def safe_mean(data):
    return statistics.mean(data) if len(data) > 0 else 0.0

三、与 numpy.mean() 的对比:选择哪个更好?

3.1 核心区别:适用场景不同

  • statistics.mean()

    • 依赖Python标准库,无需额外安装。
    • 适合小型数据集,计算简单且直观。
    • 对输入类型检查严格,会抛出明确错误。
  • numpy.mean()

    • 需要安装第三方库(pip install numpy)。
    • 专为大型数组优化,执行速度更快。
    • 支持多维数组和更复杂的参数设置(如指定轴向计算)。

3.2 性能对比示例

import numpy as np
import statistics
import time

data = np.random.rand(1000000).tolist()

start = time.time()
statistics.mean(data)
print(f"statistics.mean() 耗时: {time.time()-start:.4f}秒")

start = time.time()
np.mean(data)
print(f"numpy.mean() 耗时: {time.time()-start:.4f}秒")

输出可能类似:

statistics.mean() 耗时: 0.2314秒
numpy.mean() 耗时: 0.0032秒

这表明,当数据量极大时,numpy的性能优势显著。


四、实际应用场景与案例

4.1 学生成绩分析

假设需要计算多个班级的平均分:

class_scores = {
    "Class A": [78, 82, 95, 88, 76],
    "Class B": [85, 90, 92, 89, 87],
    "Class C": [70, 75, 80, 85, 90]
}

for class_name, scores in class_scores.items():
    avg = statistics.mean(scores)
    print(f"{class_name} 平均分:{avg:.1f}")

输出:

Class A 平均分:83.8
Class B 平均分:88.6
Class C 平均分:82.0

4.2 异常值处理:结合统计学方法

平均数容易受极端值影响。例如:

data_with_outlier = [10, 12, 15, 1000]
print(f"原始平均值:{statistics.mean(data_with_outlier):.1f}")  # 266.8

此时可能需要结合中位数(statistics.median())来获得更稳健的指标:

median_value = statistics.median(data_with_outlier)
print(f"中位数:{median_value}")  # 输出 13.5

五、进阶技巧与注意事项

5.1 处理浮点数精度问题

由于浮点数计算存在精度误差,建议使用decimal模块:

from decimal import Decimal

def precise_mean(data):
    return statistics.mean([Decimal(str(x)) for x in data])

print(precise_mean([0.1, 0.1, 0.1]))  # 输出 0.1 而非 0.30000000000000004

5.2 与数学期望的联系

在概率论中,平均数是离散随机变量的期望值。例如掷骰子的期望值:

dice_rolls = [1, 2, 3, 4, 5, 6]
expected_value = statistics.mean(dice_rolls)
print(f"期望值:{expected_value}")  # 输出 3.5

六、常见问题解答

Q1:为什么得到的是浮点数而非整数?

A:mean()方法始终返回浮点数以确保精度。例如,输入[2, 4]的平均值为3.0而非3

Q2:能否计算加权平均数?

A:statistics模块不直接支持,但可通过手动计算实现:

values = [10, 20, 30]
weights = [1, 2, 3]
weighted_sum = sum(v * w for v, w in zip(values, weights))
total_weight = sum(weights)
weighted_mean = weighted_sum / total_weight
print(weighted_mean)  # 输出 23.333...

Q3:如何处理字符串形式的数值?

A:先转换为数值类型:

string_numbers = ["5", "10", "15"]
numbers = [float(num) for num in string_numbers]
print(statistics.mean(numbers))  # 输出 10.0

结论:让统计学为代码赋能

Python statistics.mean()方法以其简洁性和直观性,成为开发者快速获取数据平均值的利器。无论是分析用户行为数据,还是处理科学实验结果,它都能提供可靠的基础支持。但需注意其与numpy方法的性能差异,以及在异常值和数据类型上的限制。通过结合其他统计方法(如中位数、标准差),开发者可以构建更健壮的数据分析流程。掌握这一工具,不仅能提升代码效率,更能帮助你在数据驱动的世界中做出更明智的决策。


通过本文的系统讲解,读者应能全面理解statistics.mean()方法的使用场景、实现原理和优化技巧。建议在实际项目中多加实践,逐步积累统计学与编程结合的经验。

最新发布