【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 方法能够有效地计算数据的标准差,帮助我们了解数据的离散程度。这对于数据分析和统计分析非常重要,可以帮助我们更好地理解数据的分布情况。

相关推荐
明月看潮生43 分钟前
青少年编程与数学 02-011 MySQL数据库应用 03课题、客户端工具
数据库·mysql·青少年编程·编程与数学
4647的码农历程1 小时前
MySQL -- 复合查询
数据库·mysql·oracle
Web项目开发3 小时前
vue3 + css 列表无限循环滚动+鼠标移入停止滚动+移出继续滚动
前端·javascript·css·vue
A Everyman4 小时前
【npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree】
前端·npm·node.js·error
云空5 小时前
《解锁Netlify:静态网站托管》:此文为AI自动生成
linux·服务器·网络·数据库
数据知道5 小时前
数据库:一文掌握 PostgreSQL 的各种指令(PostgreSQL指令备忘)
数据库·sql·postgresql
优雅的落幕6 小时前
前端---初识HTML(前端三剑客)
java·前端·javascript·css·html
nujnewnehc6 小时前
vue 少了2道面试题, vapor 来了后 vnode 和 diff 算法可以不需要了?
前端·vue.js·vapor
codingandsleeping7 小时前
前端工程化之webpack(万字)
前端·javascript
Jiude7 小时前
UnoCSS presetWind4() 背景色使用 color-mix() 的原因及解决方案
前端·css