【Pandas】pandas Series std

Pandas2.2 Series

Computations descriptive stats

方法 描述
Series.abs() 用于计算 Series 中每个元素的绝对值
Series.all() 用于检查 Series 中的所有元素是否都为 True 或非零值(对于数值型数据)
Series.any() 用于检查 Series 中是否至少有一个元素为 True 或非零值(对于数值型数据)
Series.autocorr() 用于计算 Series 的自相关系数
Series.between() 用于检查 Series 中的每个元素是否在指定的两个值之间(包括边界值)
Series.clip() 用于将 Series 中的元素限制在指定的上下限之间
Series.corr() 用于计算两个 Series 之间的相关系数
Series.count() 用于计算 Series 中非 NA/null 值的数量
Series.cov(other[, min_periods, ddof]) 用于计算两个 Series 之间的协方差
Series.cummax([axis, skipna]) 用于计算 Series 中元素的累积最大值
Series.cummin([axis, skipna]) 用于计算 Series 中元素的累积最小值
Series.cumprod([axis, skipna]) 用于计算 Series 中元素的累积乘积
Series.cumsum([axis, skipna]) 用于计算 Series 中元素的累积和
Series.describe([percentiles, include, exclude]) 用于生成 Series 对象的描述性统计信息的方法
Series.diff([periods]) 用于计算 Series 中元素与前一个元素之间差值的方法
Series.factorize([sort, use_na_sentinel]) 用于将 Series 中的唯一值编码为从 0 开始的整数索引的方法
Series.kurt([axis, skipna, numeric_only]) 用于计算 Series 中数据的峰度(kurtosis)
Series.max([axis, skipna, numeric_only]) 用于计算 Series 中所有元素的最大值
Series.mean([axis, skipna, numeric_only]) 用于计算 Series 中所有元素的算术平均值
Series.median([axis, skipna, numeric_only]) 用于计算 Series 对象中位数的函数
Series.min([axis, skipna, numeric_only]) 用于计算 Series 对象最小值的函数
Series.mode([dropna]) 用于计算 Series 对象中最常出现的值(众数)的函数
Series.nlargest([n, keep]) 用于获取 Series 对象中最大的 n 个值的函数
Series.nsmallest([n, keep]) 用于获取 Series 对象中最小的 n 个值的函数
Series.pct_change([periods, fill_method, ...]) 用于计算 Series 对象中元素与前一个元素之间百分比变化的方法
Series.prod([axis, skipna, numeric_only, ...]) 用于计算 Series 对象中所有元素乘积的函数
Series.quantile([q, interpolation]) 用于计算 Series 对象的分位数(quantiles)的方法
Series.rank([axis, method, numeric_only, ...]) 用于计算 Series 对象中每个元素的排名的方法
Series.sem([axis, skipna, ddof, numeric_only]) 用于计算 Series 对象的标准误差(Standard Error of the Mean, SEM)的方法
Series.skew([axis, skipna, numeric_only]) 用于计算 Series 对象的偏度(skewness)的方法
Series.std([axis, skipna, ddof, numeric_only]) 用于计算 Series 对象的标准差(Standard Deviation, STD)的方法

pandas.Series.std

pandas.Series.std 是 pandas 库中用于计算 Series 对象的标准差(Standard Deviation, STD)的方法。标准差是衡量数据集分散程度的统计量,它表示数据点相对于均值的离散程度。下面将详细描述该方法及其参数,并给出示例及结果。

函数描述
  • 功能:返回 Series 中所有元素的标准差。

  • 参数

    • axis:{0 or 'index'},默认为 0。对于 Series 来说,这个参数通常不需要更改,因为 Series 只有一个轴。
    • skipna:布尔值,默认为 True,表示是否跳过缺失值(NaN)。如果设置为 False,则在遇到 NaN 时返回 NaN。
    • ddof:整数,默认为 1,表示自由度调整。标准差的分母是 N-ddof,其中 N 是观测值的数量。默认情况下,使用无偏估计(即样本标准差),此时 ddof=1。
    • numeric_only:布尔值,默认为 False。此参数对 Series 影响不大,因为它只包含单一数据类型。对于 DataFrame,此参数用于限制仅计算数值列(float、int、boolean)的标准差。
  • 返回值:返回一个标量值,表示 Series 的标准差。

示例代码及结果
示例 1:基本用法
python 复制代码
import pandas as pd

# 创建一个简单的数值型 Series
s = pd.Series([1, 2, 3, 4, 5])

# 使用 std 方法计算标准差
std_result = s.std()

print(f"基本用法结果: {std_result}")
输出结果:
python 复制代码
基本用法结果: 1.5811388300841898

在这个例子中,std 方法计算了 Series 数据的标准差。具体来说,它是样本标准差,即:

[ \text{STD} = \sqrt{\frac{\sum_{i=1}^{n}(x_i - \bar{x})^2}{n-1}} ]

其中 ( x_i ) 是每个观测值,( \bar{x} ) 是样本均值,( n ) 是样本数量。对于给定的数据 [1, 2, 3, 4, 5],样本标准差约为 1.5811。

示例 2:包含缺失值的 Series
python 复制代码
# 创建一个包含缺失值的数值型 Series
s_with_nan = pd.Series([1, 2, None, 4, 5])

# 使用 std 方法计算标准差,并跳过缺失值
std_skipna_true = s_with_nan.std(skipna=True)

# 使用 std 方法计算标准差,不跳过缺失值
std_skipna_false = s_with_nan.std(skipna=False)

print(f"跳过缺失值的结果: {std_skipna_true}")

print(f"\n不跳过缺失值的结果: {std_skipna_false}")
输出结果:
python 复制代码
跳过缺失值的结果: 1.8257418583505538

不跳过缺失值的结果: nan

在这个例子中,std 方法分别在跳过和不跳过缺失值的情况下进行了计算。当 skipna=True 时,忽略 NaN 值,结果为 1.5811;当 skipna=False 时,包含 NaN 值,结果为 NaN

示例 3:使用不同的自由度调整 (ddof 参数)
python 复制代码
# 使用 std 方法计算标准差,并指定 ddof 参数
std_ddof_0 = s.std(ddof=0)
std_ddof_2 = s.std(ddof=2)

print(f"ddof=0 的结果: {std_ddof_0}")

print(f"\nddof=2 的结果: {std_ddof_2}")
输出结果:
python 复制代码
ddof=0 的结果: 1.4142135623730951

ddof=2 的结果: 1.8257418583505538

在这个例子中,std 方法根据 ddof 参数的不同进行了计算。具体来说:

  • ddof=0 时,自由度调整为 0,即分母为 ( n ),结果为 1.4142。
  • ddof=2 时,自由度调整为 2,即分母为 ( n-2 ),结果为 1.9236。
示例 4:处理非数值类型的 Series

std 方法主要适用于数值型数据。如果 Series 包含非数值类型的数据,则会抛出异常。

python 复制代码
# 创建一个包含混合类型的 Series
s_mixed = pd.Series([1, 'a', 3, 4, 5], dtype=object)

# 尝试计算标准差
try:
    std_mixed = s_mixed.std()
    print(f"标准差结果: {std_mixed}")
except TypeError as e:
    print(f"错误信息: {e}")
输出结果:
python 复制代码
错误信息: could not convert string to float: 'a'

在这个例子中,由于 Series 包含非数值类型的元素(如字符串 'a'),std 方法无法执行计算,因此抛出了 TypeError 异常。

示例 5:空的 Series
python 复制代码
import pandas as pd

# 创建一个空的 Series
empty_data = pd.Series([])

# 使用 std 方法计算标准差
std_empty = empty_data.std()

print(f"空的 Series 结果: {std_empty}")
输出结果:
python 复制代码
空的 Series 结果: nan

在这个例子中,std 方法计算了一个空的 Series 的标准差,结果为 NaN。因为没有有效的观测值,所以无法计算标准差。

示例 6:包含布尔类型的 Series
python 复制代码
# 创建一个布尔类型的 Series
s_bool = pd.Series([True, False, True, False, True])

# 使用 std 方法计算标准差
std_bool = s_bool.std()

print("布尔类型 Series 的标准差结果:")
print(std_bool)
输出结果:
python 复制代码
布尔类型 Series 的标准差结果:
0.5477225575051662

在这个例子中,std 方法计算了布尔类型 Series 数据的标准差。由于布尔值可以被视为 1(True)和 0(False),因此它们也可以参与标准差的计算。

示例 7:自定义数据生成随机分布
python 复制代码
import pandas as pd
import numpy as np

# 设置随机种子以确保结果可复现
np.random.seed(0)

# 创建一个随机生成的数值型 Series
random_data = pd.Series(np.random.randn(100))

# 使用 std 方法计算标准差
std_random = random_data.std()

print("随机生成的数据结果:")
print(std_random)
输出结果:
python 复制代码
随机生成的数据结果:
1.0129597692685017

在这个例子中,std 方法计算了一组随机生成的 Series 数据的标准差。由于这些数据是从标准正态分布中随机抽取的,理论上其标准差接近于 1,但实际计算结果可能会略有偏差,这是因为样本大小有限。

示例 8:处理右偏分布的数据
python 复制代码
# 创建一个右偏分布的数值型 Series
s_right_skewed = pd.Series([1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10])

# 使用 std 方法计算标准差
std_right_skewed = s_right_skewed.std()

print("右偏分布数据的结果:")
print(std_right_skewed)
输出结果:
python 复制代码
右偏分布数据的结果:
2.8975564417856186

在这个例子中,std 方法计算了 Series 数据的标准差。由于数据集中在较小的值附近且有较少的大值,导致分布呈现右偏(正偏度),标准差反映了这种分布的离散程度。

示例 9:处理左偏分布的数据
python 复制代码
# 创建一个左偏分布的数值型 Series
s_left_skewed = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 10, 10, 10])

# 使用 std 方法计算标准差
std_left_skewed = s_left_skewed.std()

print("左偏分布数据的结果:")
print(std_left_skewed)
输出结果:
python 复制代码
左偏分布数据的结果:
3.25

在这个例子中,std 方法计算了 Series 数据的标准差。尽管数据集中在较大的值附近且有较少的小值,导致分布呈现左偏(负偏度),标准差仍然反映了这种分布的离散程度。

示例 10:处理重复值的情况
python 复制代码
# 创建一个包含重复值的数值型 Series
s_with_duplicates = pd.Series([1, 2, 2, 3, 3, 4, 5])

# 使用 std 方法计算标准差
std_with_duplicates = s_with_duplicates.std()

print("包含重复值的数据结果:")
print(std_with_duplicates)
输出结果:
python 复制代码
包含重复值的数据结果:
1.3451854182690985

在这个例子中,std 方法计算了包含重复值的 Series 数据的标准差。尽管有重复值,标准差仍然能够准确反映数据的离散程度。

总结
  • pandas.Series.std 方法用于计算 Series 中所有元素的标准差。
  • axis 参数在 Series 中通常不需要设置,因为 Series 是一维数据结构。
  • skipna=True 时,std 方法会忽略 NaN 值并计算剩余数值的标准差。
  • skipna=False 且存在 NaN 值时,结果将为 NaN。
  • ddof 参数指定自由度调整,默认为 1。这影响了标准差的计算方式,默认情况下使用无偏估计。
  • std 方法主要适用于数值型数据,对于非数值类型的数据会抛出异常。
  • 对于空的 Series 或者所有元素都是缺失值的情况,std 方法将返回 NaN

通过这些示例可以看到,std 方法能够有效地计算数据的标准差,帮助我们了解数据的离散程度。这对于数据分析和统计分析非常重要,可以帮助我们更好地理解数据的分布情况。

相关推荐
利瑞华23 分钟前
Redis 深度解析 —— 高频面试题与核心知识点
数据库·redis·缓存
Monly211 小时前
Vue:Table合并行于列
前端·javascript·vue.js
vip1024p1 小时前
【玩转全栈】----Django基本配置和介绍
数据库·django·sqlite
ak啊1 小时前
开发一款 VSCode 插件
前端
子非鱼9212 小时前
使用ES5和ES6求函数参数的和、解析URL Params为对象
前端·javascript·es6
非凡的世界2 小时前
数据结构在 Web 开发中的重要性与应用
数据库·php·编程语言
GottdesKrieges2 小时前
GaussDB用户权限管理
数据库·oracle·gaussdb
爱学英语的程序员2 小时前
React 中常见的Hooks,安排!
前端·react.js·前端框架
好想写博客2 小时前
[深度学习]神经网络-回归项目
pytorch·python·深度学习·神经网络·回归·numpy·pandas
zhanggongzichu2 小时前
零基础Vue入门6——Vue router
前端·javascript·vue.js·vue3·路由·vue router