现在位置: 首页 > Pandas 教程 > 正文

Pandas Series.mean() 函数

Pandas 常用函数 Pandas 常用函数


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} 分")

运行结果:

学生考试成绩:
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}")

运行结果:

包含缺考成绩的数据:
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}")

运行结果:

两个班级的学生成绩:
班级   学生
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}")

运行结果:

第一周股票价格:
周一    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 常用函数 Pandas 常用函数