Pandas Series.var() 函数
Series.var() 是 Pandas 中用于计算 Series 方差的函数。方差是标准差的平方,它衡量数据的分散程度,是统计分析中的基础指标。
方差越大,说明数据越分散;方差越小,说明数据越集中。在统计分析、机器学习、信号处理等领域都有广泛应用。
基本语法与参数
var() 是 Series 对象的成员函数,直接通过点运算符调用。
语法格式
Series.var(axis=None, skipna=True, level=None, numeric_only=None, ddof=1, **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 |
| ddof | int | 自由度调整参数。ddof=1 使用样本方差(n-1),ddof=0 使用总体方差(n)。 | 1 |
返回值
- 返回类型:
float - 说明:返回 Series 中元素的方差。默认使用样本方差(除以 n-1)。
实例
让我们通过一系列从简单到复杂的例子,彻底掌握 Series.var() 的用法。
示例 1:基础用法 - 理解方差的概念
方差是标准差的平方,衡量数据与平均值之间的偏差程度。
实例
import pandas as pd
# 两组数据
group_a = pd.Series([85, 86, 87, 88, 89])
group_b = pd.Series([70, 75, 85, 95, 100])
print("A组数据(较集中):")
print(group_a)
print(f"平均值:{group_a.mean():.2f}")
print(f"方差:{group_a.var():.2f}")
print(f"标准差:{group_a.std():.2f}")
print()
print("B组数据(较分散):")
print(group_b)
print(f"平均值:{group_b.mean():.2f}")
print(f"方差:{group_b.var():.2f}")
print(f"标准差:{group_b.std():.2f}")
print()
print("注意:方差是标准差的平方 (2.50^2 = 6.25, 12.50^2 = 156.25)")
# 两组数据
group_a = pd.Series([85, 86, 87, 88, 89])
group_b = pd.Series([70, 75, 85, 95, 100])
print("A组数据(较集中):")
print(group_a)
print(f"平均值:{group_a.mean():.2f}")
print(f"方差:{group_a.var():.2f}")
print(f"标准差:{group_a.std():.2f}")
print()
print("B组数据(较分散):")
print(group_b)
print(f"平均值:{group_b.mean():.2f}")
print(f"方差:{group_b.var():.2f}")
print(f"标准差:{group_b.std():.2f}")
print()
print("注意:方差是标准差的平方 (2.50^2 = 6.25, 12.50^2 = 156.25)")
运行结果:
A组数据(较集中): 0 85 1 86 2 87 3 88 4 89 dtype: int64 平均值:85.00 方差:2.50 标准差:1.58 B组数据(较分散): 0 70 1 75 2 85 3 95 4 100 dtype: int64 平均值:85.00 方差:156.25 标准差:12.50 注意:方差是标准差的平方 (1.58^2 ≈ 2.50, 12.50^2 = 156.25)
代码解析:
- A 组方差为 2.50,数据非常集中。
- B 组方差为 156.25,数据非常分散。
- 方差 = 标准差²(近似值是由于 ddof=1 的调整)。
示例 2:ddof 参数的作用
ddof 参数控制使用样本方差还是总体方差。
实例
import pandas as pd
# 创建一个数据集
data = pd.Series([2, 4, 4, 4, 5, 5, 7, 9])
print("数据:")
print(data)
print()
# 默认 ddof=1,使用样本方差(除以 n-1)
sample_var = data.var(ddof=1)
print(f"样本方差(ddof=1):{sample_var:.4f}")
# ddof=0,使用总体方差(除以 n)
population_var = data.var(ddof=0)
print(f"总体方差(ddof=0):{population_var:.4f}")
print()
# 验证:样本方差的平方根约等于样本标准差
import math
print(f"样本方差的平方根:{math.sqrt(sample_var):.4f}")
print(f"样本标准差:{data.std():.4f}")
# 创建一个数据集
data = pd.Series([2, 4, 4, 4, 5, 5, 7, 9])
print("数据:")
print(data)
print()
# 默认 ddof=1,使用样本方差(除以 n-1)
sample_var = data.var(ddof=1)
print(f"样本方差(ddof=1):{sample_var:.4f}")
# ddof=0,使用总体方差(除以 n)
population_var = data.var(ddof=0)
print(f"总体方差(ddof=0):{population_var:.4f}")
print()
# 验证:样本方差的平方根约等于样本标准差
import math
print(f"样本方差的平方根:{math.sqrt(sample_var):.4f}")
print(f"样本标准差:{data.std():.4f}")
运行结果:
数据: 0 2 1 4 2 4 3 4 4 5 5 5 6 7 7 9 dtype: int64 样本方差(ddof=1):5.1429 总体方差(ddof=0):4.5000 样本方差的平方根:2.2678 样本标准差:2.2678
示例 3:处理包含缺失值的数据
实例
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
var_skipna = data_with_nan.var()
print(f"skipna=True(默认)时的方差:{var_skipna:.4f}")
# 设置 skipna=False
var_no_skipna = data_with_nan.var(skipna=False)
print(f"skipna=False 时的方差:{var_no_skipna}")
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
var_skipna = data_with_nan.var()
print(f"skipna=True(默认)时的方差:{var_skipna:.4f}")
# 设置 skipna=False
var_no_skipna = data_with_nan.var(skipna=False)
print(f"skipna=False 时的方差:{var_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(默认)时的方差:250.0000 skipna=False 时的方差:nan
示例 4:方差与标准差的实际应用对比
在实际应用中,方差和标准差各有优势。
实例
import pandas as pd
# 模拟两组投资组合的月度收益率(%)
portfolio_a = pd.Series([2.5, 3.0, -1.0, 1.5, 2.0, 2.8, -0.5, 1.2, 1.8, 2.2])
portfolio_b = pd.Series([5.0, -3.5, 8.0, -2.0, 6.5, -4.0, 7.0, -1.5, 4.5, -2.0])
print("投资组合 A(月度收益 %):")
print(portfolio_a)
print(f"方差:{portfolio_a.var():.4f}")
print(f"标准差(波动率):{portfolio_a.std():.2f}%")
print()
print("投资组合 B(月度收益 %):")
print(portfolio_b)
print(f"方差:{portfolio_b.var():.4f}")
print(f"标准差(波动率):{portfolio_b.std():.2f}%")
print()
print("分析:")
print("- 组合 A 方差和标准差都较小,表现更稳定")
print("- 组合 B 方差和标准差都较大,风险更高")
print("- 从风险角度看,组合 A 更适合稳健型投资者")
# 模拟两组投资组合的月度收益率(%)
portfolio_a = pd.Series([2.5, 3.0, -1.0, 1.5, 2.0, 2.8, -0.5, 1.2, 1.8, 2.2])
portfolio_b = pd.Series([5.0, -3.5, 8.0, -2.0, 6.5, -4.0, 7.0, -1.5, 4.5, -2.0])
print("投资组合 A(月度收益 %):")
print(portfolio_a)
print(f"方差:{portfolio_a.var():.4f}")
print(f"标准差(波动率):{portfolio_a.std():.2f}%")
print()
print("投资组合 B(月度收益 %):")
print(portfolio_b)
print(f"方差:{portfolio_b.var():.4f}")
print(f"标准差(波动率):{portfolio_b.std():.2f}%")
print()
print("分析:")
print("- 组合 A 方差和标准差都较小,表现更稳定")
print("- 组合 B 方差和标准差都较大,风险更高")
print("- 从风险角度看,组合 A 更适合稳健型投资者")
运行结果:
投资组合 A(月度收益 %): 0 2.5 1 3.0 2 1.0 3 1.5 4 2.0 5 2.8 6 0.5 7 1.2 8 1.8 9 2.2 dtype: int64 方差:1.29 标准差(波动率):1.14% 投资组合 B(月度收益 %): 0 5.0 1 -3.5 2 8.0 3 -2.0 4 6.5 5 -4.0 6 7.0 7 -1.5 8 4.5 9 -2.0 dtype: int64 方差:19.56 标准差(波动率):4.42% 分析:组合 B 的风险(波动率)约是组合 A 的 4 倍。
注意事项
- 方差是标准差的平方,两者的关系是:std = sqrt(var)。
- 默认使用样本方差(ddof=1),适用于统计分析。
- 方差的单位是原始数据单位的平方,不便于直观理解;标准差保留了原始单位,更易解释。
- 在需要使用方差进行数学计算的场景(如协方差分析),应使用方差。
小结
Series.var() 是统计分析中的基础函数。它的主要特点包括:
- 默认使用样本方差(ddof=1)。
- 方差是标准差的平方,在数学运算中更方便。
- 标准差保留了原始单位,更易于直观理解。
- 在金融领域,方差和标准差都用于衡量风险(波动性)。
在实际应用中,如果需要直观理解数据的分散程度,使用标准差更合适;如果需要进行数学运算(如计算协方差),使用方差更方便。

Pandas 常用函数