【Pandas】pandas DataFrame kurt
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 npdf = 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()
是一个非常有用的统计工具,适合用于探索数据分布特性、识别异常值和风险分析等任务。