【Pandas】pandas DataFrame sem
Pandas2.2 DataFrame
Computations descriptive stats
方法 | 描述 |
---|---|
DataFrame.abs() | 用于返回 DataFrame 中每个元素的绝对值 |
DataFrame.all([axis, bool_only, skipna]) | 用于判断 DataFrame 中是否所有元素在指定轴上都为 True |
DataFrame.any(*[, axis, bool_only, skipna]) | 用于判断 DataFrame 中是否至少有一个元素在指定轴上为 True |
DataFrame.clip([lower, upper, axis, inplace]) | 用于截断(限制)DataFrame 中的数值 |
DataFrame.corr([method, min_periods, …]) | 用于计算 DataFrame 中各列之间的相关系数矩阵(Correlation Matrix) |
DataFrame.corrwith(other[, axis, drop, …]) | 用于计算当前 DataFrame 的每一列(或行)与另一个 Series 或 DataFrame 中对应列的相关系数 |
DataFrame.count([axis, numeric_only]) | 用于统计 DataFrame 中每列或每行的非空(非 NaN)元素数量 |
DataFrame.cov([min_periods, ddof, numeric_only]) | 用于计算 DataFrame 中每对列之间的协方差 |
DataFrame.cummax([axis, skipna]) | 用于计算 DataFrame 中每列或每行的累计最大值(cumulative maximum) |
DataFrame.cummin([axis, skipna]) | 用于计算 DataFrame 中每列或每行的累计最小值(cumulative minimum) |
DataFrame.cumprod([axis, skipna]) | 用于计算 DataFrame 中每列或每行的累计乘积(cumulative product) |
DataFrame.cumsum([axis, skipna]) | 用于计算 DataFrame 中每列或每行的累计和(cumulative sum) |
DataFrame.describe([percentiles, include, …]) | 用于快速生成数据集的统计摘要(summary statistics) |
DataFrame.diff([periods, axis]) | 用于计算 DataFrame 中相邻行或列之间的差值(差分) |
DataFrame.eval(expr, *[, inplace]) | 用于在 DataFrame 上下文中高效地执行字符串形式的表达式运算 |
DataFrame.kurt([axis, skipna, numeric_only]) | 用于计算 DataFrame 中每列或每行的峰度(Kurtosis) |
DataFrame.kurtosis([axis, skipna, numeric_only]) | 用于计算 DataFrame 中每列或每行的峰度(Kurtosis) |
DataFrame.max([axis, skipna, numeric_only]) | 用于计算 DataFrame 中每列或每行的最大值(maximum) |
DataFrame.mean([axis, skipna, numeric_only]) | 用于计算 DataFrame 中每列或每行的平均值(mean) |
DataFrame.median([axis, skipna, numeric_only]) | 用于计算 DataFrame 中每列或每行的中位数(median) |
DataFrame.min([axis, skipna, numeric_only]) | 用于计算 DataFrame 中每列或每行的最小值(minimum) |
DataFrame.mode([axis, numeric_only, dropna]) | 用于查找 众数(出现频率最高的值) 的方法 |
DataFrame.pct_change([periods, fill_method, …]) | 用于计算 百分比变化 的方法 |
DataFrame.prod([axis, skipna, numeric_only, …]) | 用于计算 每列或每行元素的乘积 的方法 |
DataFrame.product([axis, skipna, …]) | 用于计算 DataFrame 中每列或每行所有元素的乘积 |
DataFrame.quantile([q, axis, numeric_only, …]) | 用于计算 分位数(Quantiles) 的方法 |
DataFrame.rank([axis, method, numeric_only, …]) | 用于计算 DataFrame 中每列或每行元素的排名(rank) |
DataFrame.round([decimals]) | 用于对 DataFrame 中的数值进行四舍五入 |
DataFrame.sem([axis, skipna, ddof, numeric_only]) | 用于计算 标准误(Standard Error of the Mean, SEM),即样本均值的标准差 |
pandas.DataFrame.sem()
pandas.DataFrame.sem()
方法用于计算 标准误(Standard Error of the Mean, SEM),即样本均值的标准差。它是对样本均值估计的不确定性的一种度量,常用于统计分析和假设检验。
📌 方法签名:
DataFrame.sem(axis=0, skipna=True, ddof=1, numeric_only=False)
🧾 参数说明:
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
axis | {0/‘index’, 1/‘columns’} | 0 |
0
:按列计算 SEM(默认)1
:按行计算 SEM |
|skipna
| bool | True | 是否跳过 NaN 值。若为False
,含 NaN 的列/行结果也为 NaN。 |
|ddof
| int | 1 | Delta Degrees of Freedom(自由度调整)。计算公式为:ddof = N - ddof
,其中N
是样本数量。默认使用ddof=1
(无偏估计)。 |
|numeric_only
| bool | False | 是否只考虑数值类型列(int、float),忽略布尔、字符串等非数值列 |
📊 返回值
- 返回一个
Series
,表示每列(或每行)的 SEM。 - 若某列/行全为
NaN
,则对应结果为NaN
。
✅ 标准误(SEM)定义与公式:
S E M = s N SEM = \frac{s}{\sqrt{N}} SEM=Ns
其中:
- $ s $:样本标准差
- $ N $:样本大小(非空值数量)
✅ 示例及结果
示例数据:
import pandas as pd
import numpy as npdf = pd.DataFrame({'A': [1, 2, 3],'B': [10, 20, 30],'C': [100, 200, 300],'D': [5.5, 6.5, 7.5]
})
输出原始数据:
A B C D
0 1 10 100 5.5
1 2 20 200 6.5
2 3 30 300 7.5
示例 1:默认参数(按列计算 SEM)
df.sem()
结果:
A 0.577350
B 5.773503
C 57.735027
D 0.577350
dtype: float64
解释:
- 每列的 SEM 是基于其标准差除以 √n 计算的。
- 例如:列 A 的标准差是
1
,样本数 n=3 → SEM = 1 / √3 ≈ 0.577
示例 2:按行计算 SEM(axis=1
)
df.sem(axis=1)
结果:
0 84.160503
1 111.099428
2 138.036224
dtype: float64
解释:
- 每一行的 SEM 是该行所有数值的标准差除以 √n(n=4)
- 第0行:标准差为
118.92
,n=4 → SEM ≈ 118.92 / √4 = 59.46
⚠️ 注意:实际计算中会根据
ddof
调整自由度,默认ddof=1
,即使用样本标准差(n-1)来计算。
示例 3:包含 NaN 值时设置 skipna=False
df_with_nan = pd.DataFrame({'X': [1, 2, np.nan],'Y': [np.nan, 10, 20],'Z': [5, 5, 5]
})df_with_nan.sem(skipna=False)
结果:
X NaN
Y NaN
Z NaN
dtype: float64
解释:
- 含有
NaN
的列无法计算 SEM → 结果为NaN
示例 4:设置 numeric_only=True
忽略非数值列
df_mixed = pd.DataFrame({'A': [1, 2, 3],'B': ['low', 'medium', 'high'],'C': [10.0, 20.0, 30.0]
})df_mixed.sem(numeric_only=True)
结果:
A 0.577350
C 5.773503
dtype: float64
解释:
- 字符串列
B
被自动忽略
示例 5:修改 ddof
参数(改变自由度)
df.sem(ddof=0) # 使用总体标准差(ddof=0)
结果:
A 0.471405
B 4.714045
C 47.140452
D 0.471405
dtype: float64
解释:
- 当
ddof=0
时,标准差是总体标准差(除以 n),因此 SEM 更小
⚠️ 注意事项
- 只适用于数值型列(int、float)
- 支持处理
NaN
值(通过skipna
控制是否跳过) ddof
控制标准差计算方式(影响最终 SEM)- 不会影响原始 DataFrame,返回新 Series
🎯 适用场景
场景 | 描述 |
---|---|
统计分析 | 评估样本均值的稳定性 |
实验设计 | 判断样本量是否足够精确 |
假设检验 | 构建置信区间或 t 检验 |
可视化辅助 | 配合误差条图(errorbar)展示均值不确定性 |
📋 总结
特性 | 描述 |
---|---|
功能 | 计算 DataFrame 每列或每行的 SEM(标准误) |
默认行为 | 按列计算,跳过 NaN,使用样本标准差(ddof=1) |
是否修改原数据 | 否,返回新 Series |
适用类型 | 数值型列(int、float) |
输出范围 | 浮点数,通常较小(随样本量增大而减小) |
sem()
是一个非常重要的统计方法,适合用于数据分析、实验设计、模型评估等任务,尤其是在需要衡量均值估计精度的场景中。