Python案例怎么计算数据平均值?

wen python案例 13

本文目录导读:

Python案例怎么计算数据平均值?

  1. 目录导读
  2. 为什么平均值如此重要?
  3. 基础方法:手动计算与内置函数
  4. 进阶技巧:使用NumPy与Pandas处理大数据
  5. 常见陷阱与避坑指南
  6. 真实案例:电商销售数据平均值分析
  7. 问答环节:解决你的核心疑惑
  8. 总结与下一步学习建议

Python计算数据平均值:从入门到实战的完整指南

目录导读

  1. 为什么平均值如此重要?
  2. 基础方法:手动计算与内置函数
  3. 进阶技巧:使用NumPy与Pandas处理大数据
  4. 常见陷阱与避坑指南
  5. 真实案例:电商销售数据平均值分析
  6. 问答环节:解决你的核心疑惑
  7. 总结与下一步学习建议

为什么平均值如此重要?

在数据分析中,平均值(Mean)是最基础也最核心的统计量之一,无论是评估产品销量、分析用户行为,还是计算传感器读数,平均值都扮演着“数据锚点”的角色,但许多新手在计算平均值时,往往只关注“求和除以个数”的公式,却忽略了数据类型、异常值、缺失值等关键因素,本文将结合Python实战案例,带你彻底掌握平均值的计算逻辑与优化技巧。


基础方法:手动计算与内置函数

1 纯Python实现

# 方法1:循环累加
data = [23, 45, 67, 12, 89]
total = 0
for num in data:
    total += num
average = total / len(data)
print(f"平均值:{average}")  # 输出:47.2

2 使用内置函数sum()len()

average = sum(data) / len(data)

这是最简洁的纯Python写法,但需要注意:如果列表为空,len()为0会导致ZeroDivisionError,因此建议添加判断:

data = []
average = sum(data) / len(data) if len(data) > 0 else 0

3 使用statistics模块

Python标准库提供了statistics.mean()函数,可直接处理可迭代对象:

import statistics
data = [23, 45, 67, 12, 89]
avg = statistics.mean(data)  # 输出:47.2

该方法会自动处理空列表异常(抛出StatisticsError),但仅适用于数值型数据


进阶技巧:使用NumPy与Pandas处理大数据

当数据量超过百万级,或需要处理缺失值时,NumPy和Pandas是更优选择。

1 NumPy:高性能数值计算

import numpy as np
data = np.array([23, 45, 67, 12, 89])
avg = np.mean(data)  # 返回47.2

NumPy的mean()函数在底层用C语言实现,比纯Python快数十倍,对于二维数组,可以指定axis参数:

matrix = np.array([[1,2,3],[4,5,6]])
avg_all = np.mean(matrix)       # 所有元素平均值:3.5
avg_col = np.mean(matrix, axis=0)  # 每列平均值:[2.5, 3.5, 4.5]
avg_row = np.mean(matrix, axis=1)  # 每行平均值:[2.0, 5.0]

2 Pandas:处理真实数据集的利器

import pandas as pd
# 创建DataFrame(模拟电商数据)
df = pd.DataFrame({
    'product': ['A', 'B', 'A', 'B', 'A'],
    'price': [100, 200, 150, None, 180],  # 包含缺失值
    'sales': [10, 20, 15, 25, 18]
})
# 方法1:直接计算平均值(自动忽略NaN)
avg_price = df['price'].mean()  # 输出:157.5(跳过None)
# 方法2:分组平均值
grouped_avg = df.groupby('product')['sales'].mean()
# 输出:A → 14.33, B → 22.5

关键点:Pandas的mean()函数默认忽略缺失值(skipna=True),而numpy.mean()对NaN会直接返回nan(除非指定np.nanmean())。


常见陷阱与避坑指南

陷阱1:混合数据类型

data = [1, 2, '3', 4]  # 字符串混入
statistics.mean(data)  # 报错TypeError

解决:先进行数据清洗:

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

陷阱2:异常值(Outliers)的影响

一份数据[10, 12, 11, 13, 100]中,100是异常值,平均值会被拉高至29.2,而中位数仅为12,此时应使用median()trimmed mean

from scipy import stats
trimmed_mean = stats.trim_mean(data, proportiontocut=0.2)  # 去掉前后20%数据
# 输出:12.0

陷阱3:加权平均值

当数据具有权重时(不同产品的单价不同,但销量权重不同),不能简单使用算术平均:

prices = [100, 200, 150]
weights = [0.5, 0.3, 0.2]  # 各产品销量占比
weighted_avg = sum(price * weight for price, weight in zip(prices, weights)) / sum(weights)
# 或使用numpy:np.average(prices, weights=weights)

真实案例:电商销售数据平均值分析

场景描述

某电商平台在12月份记录了1000条订单数据(存储在sales.csv中),包含字段:dateproduct_categoryrevenuequantity,需计算:

  1. 每日平均收入
  2. 各品类平均单价
  3. 排除异常订单后的整体平均收入

完整代码

import pandas as pd
import numpy as np
# 加载数据
df = pd.read_csv('sales.csv', parse_dates=['date'])
# 1. 每日平均收入
daily_avg = df.groupby(df['date'].dt.date)['revenue'].mean()
print("每日平均收入(前5天):\n", daily_avg.head())
# 2. 各品类平均单价(单价 = 收入/数量)
df['unit_price'] = df['revenue'] / df['quantity']
category_avg_price = df.groupby('product_category')['unit_price'].mean()
# 3. 排除异常值(使用IQR方法)
Q1 = df['revenue'].quantile(0.25)
Q3 = df['revenue'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
normal_df = df[(df['revenue'] >= lower_bound) & (df['revenue'] <= upper_bound)]
clean_avg_revenue = normal_df['revenue'].mean()
print(f"\n原始平均收入:{df['revenue'].mean():.2f}元")
print(f"清洗后平均收入:{clean_avg_revenue:.2f}元")

问答环节:解决你的核心疑惑

Q1:如何计算多个列表对应元素的平均值?

A:使用NumPy的np.mean()配合axis参数:

list1 = [1,2,3]
list2 = [4,5,6]
matrix = np.array([list1, list2])
print(np.mean(matrix, axis=0))  # 输出:[2.5, 3.5, 4.5]

Q2:处理大数据时,内存不够怎么办?

A:使用分批计算或numpymemmap,也可用Pandas的chunksize参数分块读取:

chunk_size = 10000
avg_list = []
for chunk in pd.read_csv('bigfile.csv', chunksize=chunk_size):
    avg_list.append(chunk['price'].mean())
final_avg = np.mean(avg_list)  # 注意:这是近似平均值,精确值需加权平均

Q3:平均值和中位数结果差异大,该用哪个?

A:当数据分布对称或接近正态分布时,优先用平均值;当存在严重偏态或异常值时,中位数能更好代表“典型值”,薪资数据通常使用中位数而非平均值。

Q4:如何计算滚动平均值(Moving Average)?

A:Pandas提供简便方法:

time_series = pd.Series([1,2,3,4,5,6,7,8])
rolling_avg = time_series.rolling(window=3).mean()
# 输出:[NaN, NaN, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]

Q5:Python计算平均值时,浮点数精度问题怎么处理?

A:使用decimal模块进行高精度计算:

from decimal import Decimal, getcontext
getcontext().prec = 10  # 设置精度
data = [Decimal('1.1'), Decimal('2.2'), Decimal('3.3')]
avg = sum(data) / len(data)

总结与下一步学习建议

本文从基础的手动计算开始,带你逐步掌握了使用内置库、NumPy和Pandas计算平均值的方法,并通过真实案例演示了数据清洗和异常值处理,核心要点包括:

  • 小数据集使用statistics.mean()足够,大数据必用NumPy/Pandas。
  • 永远注意缺失值、空列表和异常值的影响。
  • 根据业务场景选择算术平均、加权平均、滚动平均或分组平均。

下一步实践建议

  1. 尝试用Pandas分析你电脑中的CSV文件(如:股票数据或天气数据)。
  2. 学习使用scipy.stats模块中的trim_meangmean(几何平均)。
  3. 将平均值与标准差结合,构建异常检测模型。

打开你的Jupyter Notebook,开始探索数据的魔力吧!

抱歉,评论功能暂时关闭!