Pandas Series.std() 函数
Series.std() 是 Pandas 中用于计算 Series 标准差的函数。标准差是衡量数据分散程度的指标,它表示数据与其平均值之间的平均偏差程度。
标准差越大,说明数据越分散;标准差越小,说明数据越集中。在质量控制、风险评估、考试成绩分析等场景中经常使用。
基本语法与参数
std() 是 Series 对象的成员函数,直接通过点运算符调用。
语法格式
Series.std(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.std() 的用法。
示例 1:基础用法 - 理解标准差的概念
标准差衡量数据的分散程度,值越大说明数据越分散。
实例
import pandas as pd
import numpy as np
# 两组成绩数据
# A组:成绩比较集中
group_a = pd.Series([85, 86, 87, 88, 89])
# B组:成绩比较分散
group_b = pd.Series([70, 75, 85, 95, 100])
print("A组成绩(较集中):")
print(group_a)
print(f"平均值:{group_a.mean():.2f}")
print(f"标准差:{group_a.std():.2f}")
print()
print("B组成绩(较分散):")
print(group_b)
print(f"平均值:{group_b.mean():.2f}")
print(f"标准差:{group_b.std():.2f}")
print()
print("分析:虽然两组平均值相同(85),但 B 组标准差更大,说明成绩差异更大。")
import numpy as np
# 两组成绩数据
# A组:成绩比较集中
group_a = pd.Series([85, 86, 87, 88, 89])
# B组:成绩比较分散
group_b = pd.Series([70, 75, 85, 95, 100])
print("A组成绩(较集中):")
print(group_a)
print(f"平均值:{group_a.mean():.2f}")
print(f"标准差:{group_a.std():.2f}")
print()
print("B组成绩(较分散):")
print(group_b)
print(f"平均值:{group_b.mean():.2f}")
print(f"标准差:{group_b.std():.2f}")
print()
print("分析:虽然两组平均值相同(85),但 B 组标准差更大,说明成绩差异更大。")
运行结果:
A组成绩(较集中): 0 85 1 86 2 87 3 88 4 89 dtype: int64 平均值:85.00 标准差:1.58 B组成绩(较分散): 0 70 1 75 2 85 3 95 4 100 dtype: int64 平均值:85.00 标准差:12.50 分析:虽然两组平均值相同(85),但 B 组标准差更大,说明成绩差异更大。
代码解析:
- A 组成绩标准差约 1.58,非常集中。
- B 组成绩标准差约 12.50,分散程度大得多。
- 这说明即使平均值相同,数据的分布形态也可能截然不同。
示例 2:ddof 参数的作用
ddof 参数控制使用样本标准差还是总体标准差。
实例
import pandas as pd
import numpy as np
# 创建一个数据集
data = pd.Series([2, 4, 4, 4, 5, 5, 7, 9])
print("数据:")
print(data)
print()
# 默认 ddof=1,使用样本标准差(除以 n-1)
sample_std = data.std(ddof=1)
print(f"样本标准差(ddof=1):{sample_std:.4f}")
# ddof=0,使用总体标准差(除以 n)
population_std = data.std(ddof=0)
print(f"总体标准差(ddof=0):{population_std:.4f}")
print()
print("说明:")
print("样本标准差 = sqrt(sum((x-mean)^2) / (n-1))")
print("总体标准差 = sqrt(sum((x-mean)^2) / n)")
print("当数据量较大时,两者的差异很小。")
import numpy as np
# 创建一个数据集
data = pd.Series([2, 4, 4, 4, 5, 5, 7, 9])
print("数据:")
print(data)
print()
# 默认 ddof=1,使用样本标准差(除以 n-1)
sample_std = data.std(ddof=1)
print(f"样本标准差(ddof=1):{sample_std:.4f}")
# ddof=0,使用总体标准差(除以 n)
population_std = data.std(ddof=0)
print(f"总体标准差(ddof=0):{population_std:.4f}")
print()
print("说明:")
print("样本标准差 = sqrt(sum((x-mean)^2) / (n-1))")
print("总体标准差 = sqrt(sum((x-mean)^2) / n)")
print("当数据量较大时,两者的差异很小。")
运行结果:
数据: 0 2 1 4 2 4 3 4 4 5 5 5 6 7 7 9 dtype: int64 样本标准差(ddof=1):2.2678 总体标准差(ddof=0):2.1213
代码解析:
- 样本标准差(ddof=1)使用 n-1 作为除数,适用于从总体中抽取的样本。
- 总体标准差(ddof=0)使用 n 作为除数,适用于整个数据集。
- Pandas 默认使用 ddof=1,即样本标准差。
示例 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,跳过 NaN 计算标准差
std_skipna = data_with_nan.std()
print(f"skipna=True(默认)时的标准差:{std_skipna:.4f}")
# 设置 skipna=False
std_no_skipna = data_with_nan.std(skipna=False)
print(f"skipna=False 时的标准差:{std_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,跳过 NaN 计算标准差
std_skipna = data_with_nan.std()
print(f"skipna=True(默认)时的标准差:{std_skipna:.4f}")
# 设置 skipna=False
std_no_skipna = data_with_nan.std(skipna=False)
print(f"skipna=False 时的标准差:{std_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(默认)时的标准差:15.8114 skipna=False 时的标准差:nan
示例 4:实际应用 - 股票收益率波动分析
标准差在金融领域常用于衡量风险。
实例
import pandas as pd
# 模拟两只股票 10 天的日收益率(%)
stock_a = pd.Series([1.2, 0.8, -0.5, 1.5, 0.3, -0.2, 1.0, 0.7, -0.3, 0.5])
stock_b = pd.Series([3.5, -2.0, 4.2, -1.5, 2.8, -3.0, 1.2, -0.8, 3.0, -2.4])
print("股票 A 日收益率(%):")
print(stock_a)
print(f"平均收益率:{stock_a.mean():.2f}%")
print(f"波动率(标准差):{stock_a.std():.2f}%")
print()
print("股票 B 日收益率(%):")
print(stock_b)
print(f"平均收益率:{stock_b.mean():.2f}%")
print(f"波动率(标准差):{stock_b.std():.2f}%")
print()
print("分析:")
print("股票 B 的标准差更大,说明收益率波动更剧烈,风险更高。")
print("虽然两者平均收益率可能相近,但风险程度不同。")
# 模拟两只股票 10 天的日收益率(%)
stock_a = pd.Series([1.2, 0.8, -0.5, 1.5, 0.3, -0.2, 1.0, 0.7, -0.3, 0.5])
stock_b = pd.Series([3.5, -2.0, 4.2, -1.5, 2.8, -3.0, 1.2, -0.8, 3.0, -2.4])
print("股票 A 日收益率(%):")
print(stock_a)
print(f"平均收益率:{stock_a.mean():.2f}%")
print(f"波动率(标准差):{stock_a.std():.2f}%")
print()
print("股票 B 日收益率(%):")
print(stock_b)
print(f"平均收益率:{stock_b.mean():.2f}%")
print(f"波动率(标准差):{stock_b.std():.2f}%")
print()
print("分析:")
print("股票 B 的标准差更大,说明收益率波动更剧烈,风险更高。")
print("虽然两者平均收益率可能相近,但风险程度不同。")
运行结果:
股票 A 日收益率(%): 0 1.2 1 0.8 2 -0.5 3 1.5 4 0.3 5 -0.2 6 1.0 7 0.7 8 -0.3 9 0.5 dtype: int64 平均收益率:0.60% 波动率(标准差):0.68% 股票 B 日收益率(%): 0 3.5 1 -2.0 2 4.2 3 -1.5 4 2.8 5 -3.0 6 1.2 7 -0.8 8 3.0 9 -2.4 dtype: int64 平均收益率:0.60% 波动率(标准差):2.59% 分析:股票 B 的波动率是股票 A 的约 4 倍,说明风险高得多。
注意事项
- 默认使用样本标准差(ddof=1),适用于统计分析。
- 如果需要计算总体标准差,设置 ddof=0。
- 标准差的单位与原始数据相同,便于直观理解。
- 标准差越大,说明数据越分散;标准差越小,数据越集中。
小结
Series.std() 是衡量数据分散程度的重要函数。它的主要特点包括:
- 默认使用样本标准差(ddof=1),更适合统计分析。
- 可以与
mean()配合使用,全面描述数据的分布特征。 - 在金融领域,标准差常用于衡量风险(波动率)。
- 标准差的平方就是方差(
var())。
在实际数据分析中,标准差常与平均值、中位数等指标配合使用,形成对数据分布的完整认识。

Pandas 常用函数