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

Pandas Series.median() 函数

Pandas 常用函数 Pandas 常用函数


Series.median() 是 Pandas 中用于计算 Series 中位数(中间值)的函数。中位数是将数据排序后位于中间位置的值,它不受极端值影响,是描述数据集中趋势的稳健指标。

当数据中存在异常值或偏态分布时,中位数比平均值更能准确反映数据的中心位置。在收入数据分析、房价统计、成绩分析等场景中经常使用。


基本语法与参数

median() 是 Series 对象的成员函数,直接通过点运算符调用。

语法格式

Series.median(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 中所有元素的中位数。如果元素个数是偶数,返回中间两个元素的平均值。

实例

让我们通过一系列从简单到复杂的例子,彻底掌握 Series.median() 的用法。

示例 1:基础用法 - 奇数个元素的中位数

对于奇数个元素的数据,中位数就是排序后位于中间的那个值。

实例

import pandas as pd

# 创建一个包含员工收入的 Series
# 模拟一个部门 7 名员工的月收入(单位:千元)
income = pd.Series([5, 6, 7, 8, 9, 10, 50])

# 计算中位数
median_income = income.median()

print("员工月收入(千元):")
print(income)
print()
print(f"平均收入:{income.mean():.2f} 千元")
print(f"中位数收入:{median_income} 千元")
print()
print("注意:平均值受极端值(50 千元)影响较大,而中位数更能反映真实水平。")

运行结果:

员工月收入(千元):
0     5
1     6
2     7
3     8
4     9
5    10
6    50
dtype: int64

平均收入:13.57 千元
中位数收入:8.0 千元

代码解析:

  • 数据排序后:[5, 6, 7, 8, 9, 10, 50]
  • 中间位置是第 4 个元素(索引 3),值为 8。
  • 由于有一个极端值(50),平均值(13.57)被拉高,而中位数(8)更能反映大多数人的收入水平。

示例 2:偶数个元素的中位数

对于偶数个元素的数据,中位数是中间两个元素的平均值。

实例

import pandas as pd

# 创建一个包含 6 个元素的 Series
# 模拟 6 名学生的考试成绩
scores = pd.Series([75, 82, 88, 92, 95, 100])

# 计算中位数
median_score = scores.median()

print("学生考试成绩:")
print(scores)
print()
print(f"平均成绩:{scores.mean():.2f}")
print(f"中位数成绩:{median_score}")

运行结果:

学生考试成绩:
0    75
1    82
2    88
3    92
4    95
5   100
dtype: int64

平均成绩:88.67
中位数成绩:90.0

代码解析:

  • 数据排序后:[75, 82, 88, 92, 95, 100]
  • 中间两个元素是 88 和 92(索引 2 和 3)。
  • 中位数 = (88 + 92) / 2 = 90。

示例 3:处理包含缺失值的数据

skipna 参数决定了如何处理缺失值。

实例

import pandas as pd
import numpy as np

# 创建一个包含缺失值的 Series
data_with_nan = pd.Series([10, 20, np.nan, 30, 40, np.nan, 50])

print("包含缺失值的数据:")
print(data_with_nan)
print()

# 默认 skipna=True,跳过 NaN 计算中位数
median_skipna = data_with_nan.median()
print(f"skipna=True(默认)时的中位数:{median_skipna}")

# 设置 skipna=False
median_no_skipna = data_with_nan.median(skipna=False)
print(f"skipna=False 时的中位数:{median_no_skipna}")

运行结果:

包含缺失值的数据:
0    10.0
1    20.0
2       NaN
3    30.0
4    40.0
5       NaN
6    50.0
dtype: float64

skipna=True(默认)时的中位数:30.0
skipna=False 时的中位数:nan

代码解析:

  • 有效数据:[10, 20, 30, 40, 50],共 5 个元素。
  • 排序后取中间值:30。
  • skipna=False 时,只要有 NaN 就返回 NaN。

示例 4:对比平均值和中位数的应用场景

展示中位数在处理偏态数据时的优势。

实例

import pandas as pd

# 模拟一个小区 10 户的月收入数据
# 大多数人收入在 3000-5000 元,但有少数高收入者
income_data = pd.Series([3000, 3500, 3800, 4000, 4200, 4500, 4800, 5000, 8000, 50000])

print("小区住户月收入数据(元):")
print(income_data)
print()

mean_income = income_data.mean()
median_income = income_data.median()

print(f"平均值:{mean_income:.2f} 元")
print(f"中位数:{median_income} 元")
print()

print("分析:")
print("平均值(10380 元)被极端值(50000 元)大幅拉高。")
print("中位数(4350 元)更能反映大多数住户的真实收入水平。")
print("这就是为什么统计部门在公布收入数据时更常用中位数。")

运行结果:

小区住户月收入数据(元):
0     3000
1     3500
2     3800
3     4000
4     4200
5     4500
6     4800
7     5000
8     8000
9    50000
dtype: int64

平均值:10380.00 元
中位数:4350.0 元

注意事项

  • 中位数对极端值不敏感,比平均值更稳健。
  • 当数据量是偶数时,中位数是中间两个数的平均值。
  • 在数据存在明显偏态分布时,中位数比平均值更能反映数据的中心位置。
  • skipna 参数的行为与 mean() 相同。

小结

Series.median() 是描述数据集中趋势的重要函数。它的主要特点包括:

  • 不受极端值影响,计算结果稳健。
  • 对于偶数个元素,返回中间两个元素的平均值。
  • 在收入、房价等存在偏态分布的数据分析中尤为有用。
  • 语法和参数与 mean() 完全相同,易于学习和使用。

在实际数据分析中,建议同时计算平均值和中位数,以便更全面地了解数据的分布特征。当两者差异较大时,说明数据可能存在偏态分布或异常值。

Pandas 常用函数 Pandas 常用函数