【Pandas】pandas DataFrame kurt

发布于:2025-05-17 ⋅ 阅读:(10) ⋅ 点赞:(0)

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)

pandas.DataFrame.kurt()

pandas.DataFrame.kurt() 方法用于计算 DataFrame 中每列或每行的峰度(Kurtosis),即衡量数据分布尾部厚度的统计量。峰度描述了数据分布相对于正态分布的“陡峭”或“平坦”程度。


📌 方法签名:
DataFrame.kurt(axis=0, skipna=True, numeric_only=False)

🧾 参数说明:
参数 类型 描述
axis {0/‘index’, 1/‘columns’}, 默认 0
  • 0:按列计算(返回每列的峰度)
  • 1:按行计算(返回每行的峰度) |
    | skipna | bool, 默认 True | 是否跳过 NaN 值。若为 False,含 NaN 的行/列结果也为 NaN。 |
    | numeric_only | bool, 默认 False | 是否只考虑数值类型列(int、float)。若为 True,忽略布尔、字符串等非数值列。 |

📊 返回值:
  • 返回一个 Series,表示每列(或每行)的峰度值。
  • 峰度的含义如下:
    • 峰度 = 3:与正态分布相同(mesokurtic)
    • 峰度 > 3:高峰度(leptokurtic),尾部更厚,数据更集中
    • 峰度 < 3:低峰度(platykurtic),尾部更薄,分布更平坦

✅ 示例及结果:
示例1:基本用法(按列计算峰度)
import pandas as pd
import numpy as np

df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [10, 100, 10, 100, 10],
    'C': [2, 2, 2, 2, 2]  # 所有值相同 → 无变化
})

print(df.kurt())
输出结果:
A   -1.3
B    4.0
C   NaN
dtype: float64

解释:

  • 列 A:数据均匀分布,峰度 < 3 → 分布较平坦
  • 列 B:存在极端值(10 和 100 交替出现),峰度 = 4 → 尾部比正态分布厚
  • 列 C:所有值相同 → 标准差为 0,无法计算峰度 → NaN

示例2:按行计算峰度(axis=1
print(df.kurt(axis=1))
输出结果:
0   -1.5
1   -1.5
2   -1.5
3   -1.5
4   -1.5
dtype: float64

解释:

  • 每一行的三个数分别为 [1, 10, 2], [2, 100, 2], …,它们的分布形态相似,因此峰度一致。

示例3:包含 NaN 值时设置 skipna=False
df_with_nan = pd.DataFrame({
    'X': [1, 2, np.nan],
    'Y': [np.nan, 10, 20]
})

print(df_with_nan.kurt(skipna=False))
输出结果:
X   NaN
Y   NaN
dtype: float64

解释:

  • 含有 NaN 的列无法计算峰度 → 结果为 NaN

🎯 适用场景:
场景 描述
数据分析 检查数据分布是否接近正态分布
异常检测 高峰度可能表示存在极端值或异常点
金融分析 评估资产收益率分布的风险特性
特征工程 在建模前了解特征分布形状,决定是否进行变换(如对数变换)

⚠️ 注意事项:
  • 只适用于数值型列(int、float)
  • 若某列标准差为 0(所有值相等),则峰度为 NaN
  • 默认不跳过 NaN 值(可通过 skipna=False 控制)
  • 不会影响原始 DataFrame,返回新 Series

📋 总结:
特性 描述
功能 计算 DataFrame 每列或每行的峰度
默认行为 按列计算,跳过 NaN,处理所有列
是否修改原数据 否,返回新 Series
适用类型 数值型列(int、float)
输出范围 浮点数,通常在 1~6 之间(极端情况可能更大)

kurt() 是一个非常有用的统计工具,适合用于探索数据分布特性、识别异常值和风险分析等任务。


网站公告

今日签到

点亮在社区的每一天
去签到