关于Pandas版本: 本文基于 pandas2.1.2 编写。
关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。
Pandas稳定版更新及变动内容整合专题: Pandas稳定版更新及变动迭持续更新。
Pandas API参考所有内容目录
本节目录
- Pandas.DataFrame.std()
- 计算公式:
- 语法:
- 返回值:
- 参数说明:
- axis 指定计算方向(行或列)
- skipna 忽略缺失值
- numeric_only 排除非纯数值的行或列
- ddof 自由度修正
- 相关方法:
- 示例:
- 例1:如果是 `Series` 始终保持 `axis=0`,即计算整列的标准差。
- 例2、求 `DataFrame` 每列的样本标准差
- 例3、求 `DataFrame` 每行的样本标准差
- 例4:如果整行或整列,都是缺失值,那么标准差计算结果也是缺失值。
- 例5:`numeric_only=True` 只对数值类型的列求样本标准差。
- 例6:控制自由度修正值,当 `ddof=0` 将计算 **总体标准差**。
Pandas.DataFrame.std()
Pandas.DataFrame.std
方法用于返回行或列的标准差,通过控制自由度参数 ddof
可以实现返回 样本标准差
或 总体标准差
。
-
传送门:标准差的概念
-
⚠️ 关于取样方法的说明(不纠结计算过程的同学请跳过):
Pandas.DataFrame.std
方法的默认ddof=1
,对当前数据计算 样本标准差 :- 并不是在你当前数据中取样后,再进行标准差计算。
- 样本 指的是,当前准备计算标准差的数据,是你全部的数据中取出的部分样本。
- 例如:你有一个数组[1, 2, 3, 4] ,使用
Pandas.DataFrame.std
计算标准差。无论是ddof=1
或ddof=0
,参与计算的数值总量n
或N
,都是4个。 - 综上所述,强迫症同学不必纠结于样本标准差的
取样方法
,因为根本就没取样。
计算公式:
-
样本标准差公式
Pandas.DataFrame.std
默认的标准差计算方法是根号内以n-1
为底,即样本标准差:s = ∑ i = 1 n ( x i − x ˉ ) 2 n − 1 s = \sqrt{\frac{\sum_{i=1}^{n}(x_i - \bar{x})^2}{n-1}} s=n−1∑i=1n(xi−xˉ)2
s s s 表示样本标准差, n n n 表示样本大小, x i x_i xi 表示每个观测值, x ˉ \bar{x} xˉ 表示样本均值。
-
总体标准差公式
σ = ∑ i = 1 N ( x i − μ ) 2 N \sigma = \sqrt{\frac{\sum_{i=1}^{N}(x_i - \mu)^2}{N}} σ=N∑i=1N(xi−μ)2
σ \sigma σ 表示总体标准差, μ \mu μ 表示总体均值, N N N 表示总体大小。
语法:
DataFrame.std(axis=0, skipna=True, numeric_only=False, min_count=0, **kwargs)
返回值:
-
Series or DataFrame (if level specified)
- 返回
Series
或DataFrame
,依传输的数据结构而定。
- 返回
参数说明:
axis 指定计算方向(行或列)
-
axis : {0 or ‘index’, 1 or ‘columns’}, default 0
axis
参数,用于指定计算方向,即按行计算或按列计算标准差:- 如果是
Series
此参数无效,将始终保持axis=0
,即计算整列的标准差。例1 - 如果是
DataFrame
默认为axis=0
即计算每一列的标准差。并有以下参值可选:- 0 or ‘index’: 计算每列的标准差。 例2
- 1 or ‘columns’: 计算每行的标准差。例3
- 如果是
skipna 忽略缺失值
-
skipna : bool, default False >
skipna
参数,用于指定求标准差的时候是否忽略缺失值:- False: 不忽略,缺失值 在求标准差的时候,会被解析为浮点数
float 0.0
。 - True: 忽略缺失值。
⚠️ 注意 :
如果整行或整列,都是缺失值,那么标准差结果是依然是NaN。 例4
- False: 不忽略,缺失值 在求标准差的时候,会被解析为浮点数
numeric_only 排除非纯数值的行或列
-
numeric_only : bool, default False
numeric_only
参数,用于控制是否 排除非纯数值的行或列:- False: 不排除。
- True: 只对纯数值型的行或列计算标准差。例5
ddof 自由度修正
-
ddof : int, default 1 例6
ddof
: Delta 自由度,用于计算的除数是N-ddof
,其中N
代表元素的数量。默认值为 1。- ddof=1 计算 样本标准差(默认)。
- ddof=0 计算 总体标准差。
- 当
ddof=0
DataFrame.std
的行为和numpy.std
一致。
- 当
-
⚠️ddof 应该如何取值?:
- 如果你准备计算标准差的数据,是某个总体数据集的一部分样本,你想通过这一部分样本对总体数据集的标准差进行无偏估计,则可以选择使
ddof=1
或保持默认。进行样本标准差
的计算。 - 如果你准备计算标准差的数据,就是你的总体数据集的全部,你可以选择使
ddof=0
。进行总体标准差
的计算。
- 如果你准备计算标准差的数据,是某个总体数据集的一部分样本,你想通过这一部分样本对总体数据集的标准差进行无偏估计,则可以选择使
相关方法:
➡️ 相关方法
Series.std
标准差(样本标准差/总体标准差)
示例:
测试文件下载:
本文所涉及的测试文件,如有需要,可在文章顶部的绑定资源处下载。
若发现文件无法下载,应该是资源包有内容更新,正在审核,请稍后再试。或站内私信作者索要。
例1:如果是 Series
始终保持 axis=0
,即计算整列的标准差。
import numpy as np
import pandas as pds = pd.Series([24.0, np.nan, 21.0, 33, 26], name="age")
s.std()
5.0990195135927845
例2、求 DataFrame
每列的样本标准差
import numpy as np
import pandas as pddf = pd.DataFrame({'person_id': [0, 1, 2, 3],'age': [21, 25, 62, 43],'height': [1.61, 1.87, 1.49, 2.01]}).set_index('person_id')# 应返回的是Series,为了方便观察,使用.to_frame(),显式为表格形式
df.std()
age 18.786076
height 0.237417
dtype: float64
例3、求 DataFrame
每行的样本标准差
import numpy as np
import pandas as pddf = pd.DataFrame({'person_id': [0, 1, 2, 3],'age': [21, 25, 62, 43],'height': [1.61, 1.87, 1.49, 2.01]}).set_index('person_id')# 应返回的是Series,为了方便观察,使用.to_frame(),显式为表格形式
df.std(axis=1)
person_id
0 13.710800
1 16.355380
2 42.787031
3 28.984307
dtype: float64
例4:如果整行或整列,都是缺失值,那么标准差计算结果也是缺失值。
import numpy as np
import pandas as pddf = pd.DataFrame({"A": [np.nan, np.nan]},
)# 应返回的是Series,为了方便观察,使用.to_frame(),显式为表格形式
df.std()
A NaN
dtype: float64
例5:numeric_only=True
只对数值类型的列求样本标准差。
df = pd.DataFrame({"A": [0.5], "B": ["a"], "C": [True]})# 应返回的是Series,为了方便观察,使用.to_frame(),显式为表格形式
df.std(axis=1,numeric_only=True)# ... 0 0.353553
# ... dtype: object
B列由于是数字+字符串,所以没有被计算最小值。 C列布尔值和浮点数混用,也没有被计算最小值
例6:控制自由度修正值,当 ddof=0
将计算 总体标准差。
观察计算每列样本标准差的结果
df = pd.DataFrame({'person_id': [0, 1, 2, 3],'age': [21, 25, 62, 43],'height': [1.61, 1.87, 1.49, 2.01]}).set_index('person_id')
df.std()
age 18.786076
height 0.237417
dtype: float64
观察计算每列总体标准差的结果
df.std(ddof=0)
age 16.269219
height 0.205609
dtype: float64