Pandas Series.mean() 函数
Series.mean() 是 Pandas 中用于计算 Series 所有元素平均值的函数。平均值是最常用的统计指标之一,它代表了一组数据的中心趋势。
无论是计算平均工资、平均销售额还是平均成绩,mean() 都能帮助你快速完成。它是描述数据集中趋势的核心指标。
基本语法与参数
mean() 是 Series 对象的成员函数,直接通过点运算符调用。
语法格式
Series.mean(axis=None, skipna=True, level=None, numeric_only=None, **kwargs)
参数说明
| 参数 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| axis | int | 指定轴向,Series 只有一行数据,此参数主要为了与 DataFrame 兼容。 | None |
| skipna | bool | 如果为 True,在计算时跳过 NaN 值;如果为 False,遇到 NaN 结果会返回 NaN。 | True |
| level | int 或 str | 如果 Series 是多层索引(MultiIndex),指定要计算的层级。 | None |
| numeric_only | bool | 如果为 True,只对数值型数据计算;否则会尝试转换为数值。 | False |
返回值
- 返回类型:
float(即使输入是整数,返回值也会转换为浮点数) - 说明:返回 Series 中所有有效元素的平均值。如果所有元素都是 NaN,则返回 NaN。
实例
让我们通过一系列从简单到复杂的例子,彻底掌握 Series.mean() 的用法。
示例 1:基础用法 - 计算学生成绩的平均分
最基本的使用方式是创建一个数值型 Series,然后调用 mean() 计算平均值。
实例
import pandas as pd
# 创建一个包含学生成绩的 Series
# 模拟一个班级 8 名学生的考试成绩
scores = pd.Series([85, 92, 78, 90, 88, 76, 95, 82])
# 计算平均成绩
average_score = scores.mean()
print("学生考试成绩:")
print(scores)
print()
print(f"平均成绩:{average_score:.2f} 分")
# 创建一个包含学生成绩的 Series
# 模拟一个班级 8 名学生的考试成绩
scores = pd.Series([85, 92, 78, 90, 88, 76, 95, 82])
# 计算平均成绩
average_score = scores.mean()
print("学生考试成绩:")
print(scores)
print()
print(f"平均成绩:{average_score:.2f} 分")
运行结果:
学生考试成绩: 0 85 1 92 2 78 3 90 4 88 5 76 6 95 7 82 dtype: int64 平均成绩:85.75 分
代码解析:
- 创建了一个包含 8 名学生成绩的 Series。
mean()计算所有成绩的总和(685)除以学生数量(8),得到平均值 85.75。- 注意:返回值是浮点数(float),即使输入是整数。
示例 2:处理包含缺失值的数据
实际数据中经常会有缺失值,skipna 参数决定了如何处理这些缺失值。
实例
import pandas as pd
import numpy as np
# 创建一个包含缺失值的 Series
# 模拟某学生因病缺席部分考试
scores_with_nan = pd.Series([85, 92, np.nan, 90, 88, np.nan, 95, 82])
print("包含缺考成绩的数据:")
print(scores_with_nan)
print()
# 默认 skipna=True,跳过 NaN 计算平均值
average_skipna = scores_with_nan.mean()
print(f"skipna=True(默认)时的平均成绩:{average_skipna:.2f}")
# 设置 skipna=False,遇到 NaN 返回 NaN
average_no_skipna = scores_with_nan.mean(skipna=False)
print(f"skipna=False 时的平均成绩:{average_no_skipna}")
import numpy as np
# 创建一个包含缺失值的 Series
# 模拟某学生因病缺席部分考试
scores_with_nan = pd.Series([85, 92, np.nan, 90, 88, np.nan, 95, 82])
print("包含缺考成绩的数据:")
print(scores_with_nan)
print()
# 默认 skipna=True,跳过 NaN 计算平均值
average_skipna = scores_with_nan.mean()
print(f"skipna=True(默认)时的平均成绩:{average_skipna:.2f}")
# 设置 skipna=False,遇到 NaN 返回 NaN
average_no_skipna = scores_with_nan.mean(skipna=False)
print(f"skipna=False 时的平均成绩:{average_no_skipna}")
运行结果:
包含缺考成绩的数据: 0 85.0 1 92.0 2 NaN 3 90.0 4 88.0 5 NaN 6 95.0 7 82.0 dtype: float64 skipna=True(默认)时的平均成绩:88.67 skipna=False 时的平均成绩:nan
代码解析:
- 当
skipna=True(默认值)时,只计算有效值的平均值。 - 计算过程:(85 + 92 + 90 + 88 + 95 + 82)/ 6 = 532 / 6 = 88.67
- 当
skipna=False时,只要有 NaN 存在,结果就会返回 NaN。
示例 3:使用多层索引 Series
对于层次索引(MultiIndex)的 Series,可以指定计算哪个层级的平均值。
实例
import pandas as pd
# 创建一个多层索引的 Series
# 模拟两个班级学生的成绩
multi_index_scores = pd.Series(
[85, 92, 78, 90, 88, 76, 95, 82],
index=pd.MultiIndex.from_tuples([
('A班', '学生1'), ('A班', '学生2'), ('A班', '学生3'), ('A班', '学生4'),
('B班', '学生1'), ('B班', '学生2'), ('B班', '学生3'), ('B班', '学生4')
],
names=['班级', '学生']
)
)
print("两个班级的学生成绩:")
print(multi_index_scores)
print()
# 计算所有学生的平均成绩
overall_mean = multi_index_scores.mean()
print(f"所有学生平均成绩:{overall_mean:.2f}")
print()
# 按班级计算平均成绩(使用 level 参数)
class_a_mean = multi_index_scores.xs('A班', level='班级').mean()
class_b_mean = multi_index_scores.xs('B班', level='班级').mean()
print(f"A班学生平均成绩:{class_a_mean:.2f}")
print(f"B班学生平均成绩:{class_b_mean:.2f}")
# 创建一个多层索引的 Series
# 模拟两个班级学生的成绩
multi_index_scores = pd.Series(
[85, 92, 78, 90, 88, 76, 95, 82],
index=pd.MultiIndex.from_tuples([
('A班', '学生1'), ('A班', '学生2'), ('A班', '学生3'), ('A班', '学生4'),
('B班', '学生1'), ('B班', '学生2'), ('B班', '学生3'), ('B班', '学生4')
],
names=['班级', '学生']
)
)
print("两个班级的学生成绩:")
print(multi_index_scores)
print()
# 计算所有学生的平均成绩
overall_mean = multi_index_scores.mean()
print(f"所有学生平均成绩:{overall_mean:.2f}")
print()
# 按班级计算平均成绩(使用 level 参数)
class_a_mean = multi_index_scores.xs('A班', level='班级').mean()
class_b_mean = multi_index_scores.xs('B班', level='班级').mean()
print(f"A班学生平均成绩:{class_a_mean:.2f}")
print(f"B班学生平均成绩:{class_b_mean:.2f}")
运行结果:
两个班级的学生成绩:
班级 学生
A班 学生1 85
学生2 92
学生3 78
学生4 90
B班 学生1 88
学生2 76
学生3 95
学生4 82
dtype: int64
所有学生平均成绩:85.75
A班学生平均成绩:86.25
B班学生平均成绩:85.25
代码解析:
- 创建了一个具有两层索引的 Series,索引名称分别为"班级"和"学生"。
- 直接调用
mean()会计算所有元素的平均值。 - 使用
xs()方法可以按某个层级筛选数据后再计算平均值。
示例 4:在实际数据分析中的应用
结合实际业务场景,展示 mean() 的典型应用。
实例
import pandas as pd
import numpy as np
# 创建模拟的股票每日收盘价数据
stock_prices = pd.Series([
100.5, 102.3, 98.7, 101.2, 103.5,
105.2, 103.8, 107.1, 108.3, 106.9
], index=['周一', '周二', '周三', '周四', '周五',
'周一', '周二', '周三', '周四', '周五'])
# 创建两个周期的数据
week1 = stock_prices[:5]
week2 = stock_prices[5:]
print("第一周股票价格:")
print(week1)
print(f"第一周平均价格:{week1.mean():.2f}")
print()
print("第二周股票价格:")
print(week2)
print(f"第二周平均价格:{week2.mean():.2f}")
print()
# 计算两周的平均价格差异
price_diff = week2.mean() - week1.mean()
print(f"两周平均价格差异:{price_diff:.2f}")
import numpy as np
# 创建模拟的股票每日收盘价数据
stock_prices = pd.Series([
100.5, 102.3, 98.7, 101.2, 103.5,
105.2, 103.8, 107.1, 108.3, 106.9
], index=['周一', '周二', '周三', '周四', '周五',
'周一', '周二', '周三', '周四', '周五'])
# 创建两个周期的数据
week1 = stock_prices[:5]
week2 = stock_prices[5:]
print("第一周股票价格:")
print(week1)
print(f"第一周平均价格:{week1.mean():.2f}")
print()
print("第二周股票价格:")
print(week2)
print(f"第二周平均价格:{week2.mean():.2f}")
print()
# 计算两周的平均价格差异
price_diff = week2.mean() - week1.mean()
print(f"两周平均价格差异:{price_diff:.2f}")
运行结果:
第一周股票价格: 周一 100.5 周二 102.3 周三 98.7 周四 101.2 周五 103.5 dtype: float64 第一周平均价格:101.24 第二周股票价格: 周一 105.2 周二 103.8 周三 107.1 周四 108.3 周五 106.9 dtype: float64 第二周平均价格:106.26 两周平均价格差异:5.02
注意事项
mean()返回值始终是浮点数(float),即使输入数据全是整数。- 平均值对极端值(异常值)敏感,极端值会显著影响计算结果。
- 如果数据中存在大量缺失值,使用
skipna=True时要意识到平均值是基于部分数据计算的。 - 对于包含非数值数据的 Series,需要先进行数据清洗或使用
numeric_only=True参数。
小结
Series.mean() 是 Pandas 中最常用的统计函数之一。它的主要特点包括:
- 简单易用,直接通过点运算符调用。
- 支持处理缺失值,通过
skipna参数控制。 - 支持多层索引,可以通过层级选择计算。
- 返回值始终为浮点数,保证精度。
平均值是描述数据集中趋势的重要指标,但在数据存在极端值时,可能需要考虑使用中位数(median())来更好地反映数据的中心位置。

Pandas 常用函数